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

Linux系统中,查看crontab执行日志是排查定时任务是否正常运行的重要手段。以下是几种常见的查看crontab日志的方法: 1. **查看系统日志文件 `/var/log/cron`** 大多数Linux发行版将cron相关的日志记录在 `/var/log/cron` 文件中。可以使用 `tail` 或 `cat` 命令查看该文件内容,例如: ```bash tail -f /var/log/cron ``` 这条命令可以实时监控日志的更新,帮助判断任务是否被触发以及执行过程中是否有异常情况 [^2]。 2. **使用 `systemctl` 或 `journalctl` 查看日志(适用于使用 `systemd` 的系统)** 在基于 `systemd` 的系统上,cron服务可能由 `systemd` 管理。可以使用以下命令查看相关日志: ```bash journalctl | grep cron ``` 或者查看具体的cron服务状态: ```bash systemctl status cron ``` 3. **检查邮件通知(Mail Spool)** 如果crontab任务配置了邮件通知,系统会将执行结果发送到用户的邮件队列中。默认情况下,这些邮件存储在 `/var/spool/mail/` 目录下,例如: ```bash tail -f /var/spool/mail/root ``` 通过该命令可以查看任务执行时的标准输出和错误输出内容 。 4. **检查临时执行文件(适用于部分Unix系统)** 在某些Unix系统中,crontab任务执行时会生成临时文件,通常位于 `/var/spool/cron/tmp` 目录下。这些文件名可能类似于 `croutXXX001864`,通过查看这些文件可以了解任务的执行状态 [^2]。 5. **启用crond的调试模式(可选)** 如果上述方法仍无法定位问题,可以尝试临时启用cron的调试模式。编辑 `/etc/sysconfig/crond`(Red Hat系)或 `/etc/default/cron`(Debian系),添加 `-x` 参数以启用详细日志输出。 6. **确认cron服务是否运行正常** 使用以下命令检查cron服务是否处于运行状态: ```bash systemctl status cron ``` 如果服务未运行,可以尝试启动它: ```bash systemctl start cron ``` 7. **检查crontab语法和执行权限** 使用 `crontab -l` 查看当前用户的任务列表,确认任务格式是否正确,并确保脚本具有可执行权限。例如: ```bash crontab -l chmod +x /path/to/script.sh ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值