我曾经crontab -e在我的 crontab 中添加以下行:
* * * * * echo hi >> /home/myusername/test
Run Code Online (Sandbox Code Playgroud)
但是,我没有看到测试文件被写入。这是权限问题,还是 crontab 无法正常工作?
我看到 cron 进程正在运行。我该如何调试?
编辑- Ask Ubuntu 有一个关于 crontab 的好问题,不幸的是,这仍然对我没有帮助。
编辑 2 - 嗯,我的测试文件似乎有 214 行,这意味着在过去的 214 分钟内,它每分钟写入一次。我不确定是什么问题,但它显然已经消失了。
gel*_*aen 29
您在 cronjob 之后添加了一个空行吗?
Gil*_*il' 24
有一些实现cron(不是全部,我不记得是哪一个,但我在 Linux 下遇到过)每分钟检查更新的 crontab 文件,直到下一分钟才考虑新条目. 因此,第一次启动 crontab 最多可能需要两分钟。这可能是你观察到的。
小智 10
我遇到了同样的问题 - 在我最后添加了一个新条目后,一个正常工作的 crontab 突然停止了。结果是我忘记在最后一行之后放一个换行符。
我通过发出命令发现
cat /var/log/syslog | grep crontab
Run Code Online (Sandbox Code Playgroud)
并且输出显示了问题:
Jul 2 08:16:01 shiva cron[1254]: (*system*) RELOAD (/etc/crontab)
Jul 2 08:16:01 shiva cron[1254]: (*system*) ERROR (Missing newline before EOF, this crontab file will be ignored)
Run Code Online (Sandbox Code Playgroud)
添加换行符并保存解决了问题。
听起来这是固定的。下次,也尝试记录 STDERR。以下只会记录到 STDOUT,而不是 STDERR:
* * * * * echo hi >> /home/myusername/test
Run Code Online (Sandbox Code Playgroud)
尝试确保 STDERR 也有明确的子句。否则,根据 Cron 的配置方式,STDERR 可能会通过电子邮件发送给用户(假设电子邮件正在工作),或者可能根本不去任何地方。
* * * * * echo hi >> /home/myusername/test 2> /home/myusername/test.stderr
Run Code Online (Sandbox Code Playgroud)
我的偏好是将 cronjob 输出发送到 syslog。这样我就可以利用任何现有的系统日志基础设施(集中式系统日志、Splunk、已经支持的日志轮换,很容易比较 /var/log/messages 和 /var/log/cronjob 等中的消息),而我不是用不必要的电子邮件向系统管理员(我)发送垃圾邮件。
* * * * * echo hi >> /home/myusername/test 2>&1 | /usr/bin/logger -t mycronjob
Run Code Online (Sandbox Code Playgroud)