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,于是系统报错,解决方面就是不要直接向屏幕输出内容,而是重定向到一个文件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值