在线工具
crontab 在线网站: https://tooltt.com/crontab/c/56.html
在线 cron 表达式生成: https://cron.qqe2.com/
安装 cron
CentOS 默认自带,如需安装:
1 | yum -y install vixie-cron |
基本使用命令
1 | crontab -u # 设定某个用户的 cron 服务,一般 root 用户在执行这个命令的时候需要此参数 |
查看日志
1 | # 查看执行日志 |
服务管理
1 | /sbin/service crond start # 启动服务 |
添加到开机服务
在 /etc/rc.d/rc.local 这个脚本的末尾加上:
1 | /sbin/service crond start |
示例
1 | */5 * * * * Command # 每 5 分钟执行一次命令 |
特殊字符串
| 字符串 | 含义 |
|---|---|
@reboot | 开机时运行一次 |
@yearly | 每年运行一次,等同于 0 0 1 1 * |
@annually | 同 @yearly |
@monthly | 每月运行一次,等同于 0 0 1 * * |
@weekly | 每周运行一次,等同于 0 0 * * 0 |
@daily | 每天运行一次,等同于 0 0 * * * |
@midnight | 同 @daily |
@hourly | 每小时运行一次,等同于 0 * * * * |
配置完成后,会在开机后进行启动。如果需要延时启动,可以参考:
1 | @reboot sleep 300 && /home/start.sh |
注意事项
crontab 中 % 是有特殊意义的,如果使用到了 %,需要进行转义:\%
常见问题
问题 1:cron 表达式格式不同
cron 表达式和开发中常用 6/7 位的方式不同。假如想设置每分钟执行,0/1 * * * * 是不对的,需要以 * 开头:*/1 * * * *
问题 2:没有任务执行日志
一般是因为 postfix.service 没有或者没启动,对应安装下即可:
1 | # 检查状态 |
问题 3:not found command
一般是因为在 crontab 中没有指定环境。
例如任务将要执行的脚本中使用到了 kubectl,但是 kubectl 在 /usr/local/bin 下,需要明确指出,如下:
1 | SHELL=/bin/bash |

问题 4:postfix 启动报错
报错信息:newaliases: fatal: parameter inet_interfaces: no local interface found for ::1
编辑 /etc/postfix/main.cf:
1 | vi /etc/postfix/main.cf |
将配置:
1 | inet_interfaces = localhost |
改成:
1 | inet_interfaces = all |
接着重新启动,如果又出现以下信息:
1 | Apr 28 09:09:08 PaulV1 postfix[23919]: postsuper: fatal: scan_dir_push: open directory defer: Permission denied |
这是因为启动时邮件服务对系统目录没有权限导致的,更改相关目录的所有者,然后重新启动:
1 | chown -R postfix /var/spool/postfix/ |
如果启动的时候显示还有一个目录没有权限:
1 | Apr 28 09:21:57 PaulV1 postfix/master[24146]: fatal: open lock file /var/lib/postfix/master.lock: cannot open file: Permission denied |
执行:
1 | chown -R postfix /var/lib/postfix/ |
最后才能启动成功。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小五的个人杂货铺!