Linux Crontab 定时任务

cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:

/sbin/service crond start    //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置

你也可以将这个服务在系统启动的时候自动启动:

  在/etc/rc.d/rc.local这个脚本的末尾加上:

/sbin/service crond start

crontab 命令

crontab file [-u user]              //用指定的文件替代目前的crontab。
crontab -u[user]                    //指定要设定计时器的用户名称.
crontab -l[user]                    //列出该用户的计时器设置 
crontab -e[user]                    //编辑该用户的计时器设置 
crontab -r[user]                    //删除该用户的计时器设置。 
crontab -c dir                      //指定crontab的目录。 

如:root查看自己的cron设置:crontab -u root -l
      root删除fred的cron设置:crontab -u fred -r

第一个命令行中,file是命令文件的名字。如果在命令行中指定了这个文件,那么执行crontab命令,则将这个文件拷贝到crontabs目录下;如果在命令行中没有制定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将他们也存放在crontab目录下。


命令行中-r选项的作用是从/var/spool/cron/crontabs目录下删除用户定义的文件crontab;

crontab文件的格式:M H D m d cmd. 

M: 分钟(0-59)。 
H:小时(0-23)。
D:天(1-31)。
m: 月(1-12)。
d: 一星期内的天(0~60 表示星期天)

  除了数字还有几个个特殊的符号就是"*"、"/"和"-"、",",*代表所有的取值范围内的数字,"/"代表每的意思,"*/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。

例子:

#每天早上6点
106* * * date

#每两个小时
0*/2* * * date

#晚上11点到早上8点之间每两个小时,早上部点
0 23-7/28* * * date

#每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
0 11 4* mon-wed date

#1月份日早上4点
0 4 1 jan* date
30 21* * * /apps/bin/cleanup.sh                     //每晚的21:30运行/apps/bin目录下的cleanup.sh。 
45 4 1,10,22 * * /apps/bin/backup.sh //每月1、10、22日的4:45运行/apps/bin目录下的backup.sh。
10 1 * * 6,0 /bin/find -name "core" -exec rm {} ; //每周六、周日的1:10运行一个find命令。
0,30 18-23 * * * /apps/bin/dbcheck.sh //在每天18:00至23:00之间每隔30分钟运行/apps/bin目录下的dbcheck.sh。
0 23 * * 6 /apps/bin/qtrend.sh //每星期六的11:00 pm运行/apps/bin目录下的qtrend.sh。



在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e
进入vi编辑模式,编辑的内容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt
编辑/etc/crontab文件,在末尾加上一行: 30 5 * * * root init 6 这样就将系统配置为了每天早上5点30自动重新启动。

每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件,此用户的cron信息都记录在这 个文件中,这个文件是不可以直接编辑的,只可以用crontab -e 来编辑。cron启动后每过一份钟读一次这个文件,检查是否要执行里面的命令。因此此文件修改后不需要重新启动cron服务。

在/etc目录下有一个crontab文件,这里存放有系统运行的一些调度程序(还有cron.d/ cron.deny cron.monthly/ cron.weekly/ cron.daily/ cron.hourly/ crontab)。

作业与它们预定的时间储存在文件/var/spool/cron/crontabs/username里。username使用户名,在相应的文件中存放着该用户所要运行的命令。

/usr/lib/cron/cron.allow表示谁能使用crontab命令

  a) 如果它是一个空文件表明没有一个用户能安排作业。

  b) 如果这个文件不存在,而有另外一个文件/usr/lib/cron/cron.deny,则只有不包括在这个文件中的用户才可以使用crontab命令。

  c) 如果它是一个空文件表明任何用户都可安排作业。两个文件同时存在时cron.allow优先,如果都不存在,只有超级用户可以安排作业。

例1:以Linux下定时备份mysql为例说明下
写一个简单的mysql备份shell脚本

vi
#!/bin/sh
da=`date +%Y%m%d%H%M%S`
mysqldump -u root -pdongjj --all-database>/root/mysqlbakup/$da

保存为 mysqlbak.sh
然后 crontab-e 0 3 * * * /root/mysqlbak.sh
保存退出

例2:让一个脚本自动定时运行

[root@test1 init.d]# crontab -e

在root文件后面添加一行(含义:每月的18日4:40分执行scott_select.sh)

40 4 18 * * /oracle_backup/bin/scott_select.sh
0 0 23 * * /patch to tranferfiles.sh >;tranferfiles.log

设置完了之后不要忘了,启动定时服务(大多数忘了这里)

[root@test1 init.d]# service crond stop
[root@test1 init.d]# service crond start

或者

/etc/init.d/crontab start
原文地址:https://www.cnblogs.com/shuaixf/p/2237267.html