Linux的crontab
配置文件
在Centos系统中系统级别的crontab的配置文件在/etc/crontab
中,用户级别的配置文件在 /var/spool/cron
目录下,其文件名与用户名一致。
-
查看系统级别配置文件可以看到如下的内容:
[root@node ~]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed
前四行是用来配置crond任务运行的环境变量,
- 第一行SHELL变量指定了系统要使用哪个shell,这里是bash;
- 第二行PATH变量指定了系统执行命令的路径;
- 第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户;
-
查看root用户的配置文件,如果不存在可以新建,要保证用户名和文件名一致。用户的配置文件是不可以直接编辑的,需要使用
crontab -e
进行编辑操作。
crontab命令详解
格式:
crontab [-u user] file
crontab [ -u user ] [ -i ] { -e | -l | -r }
- -u user:用于设定某个用户的crontab服务;
- file: file为命令文件名,表示将file作为crontab的任务列表文件并载入crontab;
- -e:编辑某个用户的crontab文件内容,如不指定用户则表示当前用户;最常用的命令
- -l:显示某个用户的crontab文件内容,如不指定用户则表示当前用户;最常用的命令
- -r:从/var/spool/cron目录中删除某个用户的crontab文件。最常用的命令
- -i:在删除用户的crontab文件时给确认提示。
使用
注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。
有些命令在命令行里执行很好,到了crontab里面不能正常执行,就是因为环境变量问题。
* * * * * - - - - - | | | | | | | | | +----- 星期中星期几 (0 - 7) (星期天 为0) | | | +---------- 月份 (1 - 12) | | +--------------- 一个月中的第几天 (1 - 31) | +-------------------- 小时 (0 - 23) +------------------------- 分钟 (0 - 59)
"*"代表所有的取值范围内的数字,如月份字段为*,则表示1到12个月;
"/"代表每一定时间间隔的意思,如分钟字段为*/10,表示每10分钟执行1次。
"-"代表从某个区间范围,是闭区间。如“2-5”表示“2,3,4,5”,小时字段中0-23/2表示在0~23点范围内每2个小时执行一次。
","分散的数字(不一定连续),如1,2,3,4,7,9。
注:由于各个地方每周第一天不一样,因此Sunday=0(第一天)或Sunday=7(最后1天)。
示例
每一分钟执行一次command(因cron默认每1分钟扫描一次,因此全为*即可)
* * * * * command
每小时的第3和第15分钟执行command
3,15 * * * * command
每天上午8-11点的第3和15分钟执行command:
3,15 8-11 * * * command
每隔2天的上午8-11点的第3和15分钟执行command:
3,15 8-11 */2 * * command
每个星期一的上午8点到11点的第3和第15分钟执行command
3,15 8-11 * * 1 command
每晚的21:30重启smb
30 21 * * * /etc/init.d/smb restart
每月1、10、22日的4 : 45重启smb
45 4 1,10,22 * * /etc/init.d/smb restart
每周六、周日的1 : 10重启smb
10 1 * * 6,0 /etc/init.d/smb restart
每天18 : 00至23 : 00之间每隔30分钟重启smb
0,30 18-23 * * * /etc/init.d/smb restart
每一小时重启smb
* */1 * * * /etc/init.d/smb restart
晚上11点到早上7点之间,每隔一小时重启smb
* 23-7/1 * * * /etc/init.d/smb restart
每月的4号与每周一到周三的11点重启smb
0 11 4 * mon-wed /etc/init.d/smb restart
每小时执行/etc/cron.hourly目录内的脚本
0 1 * * * root run-parts /etc/cron.hourly
注意!!!!
-
crontab有2种编辑方式:直接编辑
/etc/crontab
文件与crontab –e
,- 其中
/etc/crontab
里的计划任务是系统中的计划任务 - 而用户的计划任务需要通过
crontab –e
来编辑
- 其中
-
每次编辑完某个用户的cron设置后,cron自动在
/var/spool/cron
下生成一个与此用户同名的文件,此用户的cron信息都记录在这个文件中,这个文件是不可以直接编辑的,只可以用crontab -e 来编辑。 -
crontab中的command尽量使用绝对路径,否则会经常因为路径错误导致任务无法执行。
比如执行jar文件的时候,尽量将Java的目录使用完整的目录。要不就是用环境变量
*/1 * * * * /usr/local/java/jdk1.8/bin/java -jar /home/users/Demo.jar
-
新创建的cron job不会马上执行,至少要等2分钟才能执行,可从起cron来立即执行。
-
%在crontab文件中表示“换行”,因此假如脚本或命令含有%,需要使用
\%
来进行转义。