crontab使用
命令行相关
crontab [ -u user ] file
crontab [ -u user ] [ -i ] { -e | -l | -r }
crontab是一个程序,用来安装、卸载、显示定时任务列表,用于驱动cron守护进程。
每个用户都可以拥有自己的crontab,一般存放在/var/spool/cron/crontabs下,且以用户名作为文件名称,一般不建议直接编辑文件(可能定时任务无法生效),建议使用crontab -e
-u 指定特定用户的crontab (使用suod时可以指定该用户,不至于导致crontab变成root)
如果不指定-u参数,则crontab examines "your" crontab
-l 显示当前用户的定时任务
-r 删除当前用户的定时任务
-e 编辑当前用户的定时任务
-i 和-r搭配使用,在删除前给出提示信息
cron [-f] [-l] [-L loglevel]
cron is started automatically from /etc/init.d on entering multi-user runlevels.
Cron从/etc/init.自动启动进入多用户运行级别。
-f 保持在前台模式,不要后台化。
-l 为/etc/cron.d文件启用符合LSB的名称
-n 发送邮件时,在主题中包含FQDN。默认情况下,cron将缩写主机名。
-L loglevel 告诉cron要记录关于作业的哪些内容(不管该值如何,都会记录错误)
0 disable
1 will log the start of all cron jobs (default)
2 will log the end of all cron jobs
4 will log all failed jobs (exit status != 0)
8 will log the process number of all cron jobs
15 all
cron在/var/spool/cron/crontabs中查找crontab文件,并加载进内存中;
cron读取/etc/crontab,在Debian中会预定义/etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly and /etc/cron.monthly
cron读取/etc/cron.d目录,和/etc/crontab同等处理。
和/etc/crontab一样,/etc/cron.d路径下的文件被实时检测是否有改动;
/etc/crontab和etc/cron.d路径下的文件的拥有者都应该是root
/etc/cron.d, /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly下的文件也可以是符号链接,只要符号链接和它所指向的文件都属于根用户。
/etc/cron.d下的文件不需要是可执行文件;
/etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly,/etc/cron.monthly需要可执行
cron每分钟唤醒一次(也就是说cron的最小精度是一分钟,如果需要实现秒级的定时任务,需要做一定的调整),检查每个命令,看看它是否应该在当前分钟内运行。在执行命令时,任何输出都会发送给crontab的所有者(或者发送给crontab中MAILTO环境变量中指定的用户,如果存在的话)。
cron每分钟检查它的spool目录的modtime(或/etc/crontab文件上的modtime)是否已更改,如果已更改,cron将检查所有crontab上的modtime并重新加载那些已更改的。因此,每当crontab文件被修改时,不需要重新启动cron。注意,crontab(1)命令在更改crontab时更新spool目录的modtime。
crontab每次更新定时任务时,都会自动加载相关改动,无需再次重启服务;
修改系统时间,当时钟更改少于3小时时,需要特别考虑,只有在特定时间运行的作业会受到影响。使用通配符指定的作业将立即基于新时间运行。
超过3小时的时钟变化被认为是对时钟的修正,并立即使用新的时间。
cron将日志记录到syslog的cron中,可以使用标准syslogd控制输出打印
配置文件相关
/etc/cron.allow
/etc/cron.deny
针对不同用户,需要关注,类似于黑白名单;
/var/spool/cron/crontabs
The files under /var/spool/cron/crontabs are named based on the user's account name.
针对用户级的crontab文件,存放在/var/spool/cron/crontabs路径下,已用户名命名;
/etc/crontab crontab配置文件
/etc/cron.hourly
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly
/etc/cron.d
Debian系统中配置/etc/default/cron的话,可以通过使用/etc/environment或/etc/default/locale来管理cron守护进程本地化设置环境,使用后者的值覆盖前者的值。将读取这些文件,并使用它们设置LANG、LC_ALL和LC_CTYPE环境变量。然后使用这些变量设置邮件字符集,默认值为'C'。
如果存在/etc/timezone,守护进程将使用/etc/timezone中的时区定义。
可以在用户的crontab定义中重新定义环境,但cron只处理单一时区中的任务。
日志相关
cat /var/spool/mail/uos
mail
查看当前cron发送的邮件信息,里面包含执行的脚本和具体的执行结果(显示内容等)
sudo cron -L 15
udo cat /var/log/syslog |grep cron
设置日志等级并查看日志信息