crontab 踩坑记录

crontab是linux 下的定时工具
但是有很多坑

1. 第一个坑 crontab 命令中 %

如果原始命令中带有 %
那么很可能会执行失败 因为crontab中的%号有特殊含义 需要使用 转义字符去转义
例如 下面这个命令 手动执行时候好好的 在crontab中就会失败 就是因为% 已经两次掉进坑里面了 其实可以发现加了反斜杠的%好不加反斜杠的%在crontab 用vim编辑时候的颜色已经不一样了

echo $(date +"%Y%m%d")

2. 第二个坑 crontab 命令忘了加换行符

每个crontab 中的指令需要换行符作为结尾才能生效 所以千万别忘了换行符

3. 第三个坑 crontab 的环境变量和当前路径

crontab的环境变量可能和用户的不太一样 最好在crontab -e时候开头用 PATH=“xxx” 和 SHELL = "xxx"指定
同样 在命令里面不要用相对路径 要用绝对路径 crontab执行时的当前路径和我们shell里面的不一样

4. 第四个坑 crontab 的输出

标准输出 默认输出到MTA 邮件里面 控制台看不到 所以要重定向到某个日志文件中

5. 第五个坑 crontab 没有日志文件

那应该是在 系统日志配置中默认没有打开 找不到/var/log/cron.log
需要配置一下 参考下面的方案

  1. 刚开始怀疑是cron服务没有启动,遂执行:

sudo service cron status

发现cron服务是running的,排除;

  1. 继而怀疑是任务文件创建后未能被系统及时get到,因而执行:

sudo service cron restart

重启cron后问题依旧,排除;

  1. 于是进一步查看cron运行日志(/var/log/cron.log),但是并未找到相关文件,原因是ubuntu默认没有开cron日志,执行命令:

sudo vim /etc/rsyslog.d/50-default.conf

找到cron.log相关行,将前面注释符#去掉,保存退出,重启rsyslog:

sudo service rsyslog restart

执行

less -10 /var/log/cron.log再次查看cron运行日志,log出来了,

提示如下信息:

No MTA installed, discarding output

原因是cron把屏幕输出都发送到email了,而当前环境并未安装email server,于是系统报错,解决方面就是不要直接向屏幕输出内容,而是重定向到一个文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章