运行linux后,开机自启动crond任务,系统会每分钟检查是否有要执行的任务工作(循环检测)
一、计划任务的权限管理
/etc/cron.allow 和 /etc/cron.deny 文件被用来限制对cron 的使用。
这两个使用控制文件的格式都是每行一个用户。两个文件都不允许空格。如果使用控制文件被修改了,cron 守护进程(crond)不必被重启。使用控制文件在每次用户添加或删除一项 cron 任务时都会被读取。
无论使用控制文件中的规定如何,根用户都总是可以使用 cron。
如果 cron.allow 文件存在,只有其中列出的用户才被允许使用 cron,并且 cron.deny 文件会被忽略。
如果 cron.allow 文件不存在,所有在 cron.deny 中列出的用户都被禁止使用 cron。
二、计划任务配置方式
直接编写计划任务
命令:crontab -e
编写任务的格式
# 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
# | | | | |
# * * * * * command to be executed
注意:在写命令时,请使用绝对路径
计划任务配置文件e
使用目录的方式,放在目录里面的都会定时执行,定时目录可在/etc/crontab中设定。
01 * * * * root run-parts /etc/cron.hourly //每小时执行/etc/cron.hourly内的脚本
02 4 * * * root run-parts /etc/cron.daily //每天执行/etc/cron.daily内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly //每星期执行/etc/cron.weekly内的脚本
42 4 1 * * root run-parts /etc/cron.monthly //每月去执行/etc/cron.monthly内的脚本
三、计划任务日志
cron执行的每一项工作都会被纪录到/var/log/cron这个日志文件中,可以从这个文件查看命令执行的状态。
Question:计划任务不执行的原因排查过程
crond不执行的原因主要有以下几个方面:
3.1、crond服务没启动
service crond start
service crond stop
service crond restart
service crond reload
3.2、用户没有执行crond的权限
/etc/cron.deny文件用来控制哪些用户不能执行crond服务的功能。
可以将自己从文件中删去,或者联系root
3.3、Crond执行的环境变量
解决方法:在脚本中加入下面这一行:
. /etc/profile
3.4、没有使用绝对路径
这里的绝对路径包括脚本中的路径和crond命令中的路径两个方面。
如果以上还没有解决,请检查输出的日志
四、计划任务输出内容重定向
4.1、不记录错误信息
这时可以使用输出重定向,即在计划任务后加上> /dev/null 2>&1
9 9 * * * /usr/local/bin/cvsb > /dev/null 2>&1
2>&1:把错误重定向到输出要送到的地方。
把命令的执行结果重定向到/dev/null,即把产生的错误抛弃。
4.2、错误信息重定向到单个文件
9 9 * * * /usr/local/bin/cvsb > /var/log/crontab_log 2>&1
上例将cron的执行过程输出到一个文本文件crontab_log,这个文件可以随便手动建一个,放在哪都行,重定向目录写对就Ok。