强大的crontab

2016-09-25  本文已影响376人  寂寞的原子

Unix-like 系统中都有一个定时任务服务:crontab
最近用它来处理开机自动启动服务,以及定期刷新证书,十分方便。

配置文件

# 用户级配置文件
$ crontab [-u user] {-e | -l | -r}
# `-e`编辑,`-l`显示,`-r`删除

# 系统全局配置文件
$ vim /etc/crontab

配置格式

配置文件中可定义环境变量:

PATH=/usr/bin:/usr/local/bin

配置文件每行定义一个任务,格式如下,每列之间用至少一个空白符隔开:

# 用户级
时间 绝对路径 [参数...]

# 全局`/etc/crontab`多一列`user`
时间 用户 绝对路径 [参数...]

时间的格式通常为5列,分别表示

每个字段均可以有一下表示方法:

此外还有一些特殊的运行时机表示方法,用@开头:

实例如下:

# 每5分钟执行
*/5 * * * * /home/gerald/run_every_5_min
# 每个月1号2点执行
0 2 1 * * /home/gerald/run_per_month
# 每个月1号和15号的2点执行
0 2 1,15 * * /home/gerald/run_twice_per_month
# 每次开机执行
@reboot /home/gerald/run_on_reboot

可能遇到的坑

  1. crontab配置正确,但没有执行。
    注意系统的cron服务有没有启动:
    # 查看状态
    $ sudo systemctl status cron
    # 激活服务
    $ sudo systemctl enable cron
    
  2. 系统全局配置/etc/crontab不执行。
    检查是否写了user,不然就会因为配置文件解析失败导致整个文件被忽略。
    因此个人认为使用crontab -e进行配置更好,如需以root用户配置则使用sudo crontab -esudo crontab -u root -e
  3. 脚本执行失败,找不到命令。
    值得注意的是,crontab执行任务时,默认是不带任何环境变量的。可以在配置中显式指定环境变量,或者使用绝对路径来执行命令。
上一篇 下一篇

猜你喜欢

热点阅读