我意识到网站上有很多关于 cron 的问题,我花了整整一个小时寻找解决方案,但一直没能找到。本质上 cron 作业确实执行了,但它似乎没有执行,或者至少没有将输出输出到我指定的文件中。
我可以看到 cron 正在运行:
josh@lin-ldn-cen:~$ pgrep cron
734
cron 作业成功执行,如我的 /var/log/cron 文件中所示:
Sep 26 08:34:01 lin-ldn-cen CROND[82848]: (josh) CMD (/home/josh/test_script.sh > /home/josh/cron_logs/test.log)
我在 crontab 文件中使用了绝对路径并设置了 PATH。我在 crontab 文件的末尾添加了一个换行符:
josh@lin-ldn-cen:~$ crontab -l
SHELL=/bin/sh PATH=/bin:/sbin:/usr/bin:/usr/sbin
0 */6 * * * /home/josh/youtube-downloads/download_djdj.sh > /home/josh/cron_logs/cron_download_djdj.log
*/5 * * * * /home/josh/youtube-downloads/download_djdj.sh 2>&1 /home/josh/cron_logs/cron_download_djdj.log
* * * * * /home/josh/test_script.sh > /home/josh/cron_logs/test.log
(将路径放在顶部对我的脚本的执行没有任何影响)
test_script.sh 非常简单,我也在其中使用了绝对路径 - 它如下:
josh@lin-ldn-cen:~$ cat test_script.sh
#!/bin/bash/
/usr/bin/echo Hello world
我还尝试了其他几种方法 - 包括.
在 crontab 文件中的脚本前添加一个,使用 2>&1 输出错误,仔细检查路径,使用 chmod +x test_script.sh 仔细检查 .sh 文件是否可执行,在 crontab 文件中的命令前同时包含 sh 和 bash - 这些似乎都不起作用。我所期望的只是在 /home/josh/cron_logs/test.log 中看到“Hello world”。
编辑:我想补充一下,这是在 Debian 上,而不是 Ubuntu 上。抱歉。
答案1
从那时起,我意识到 .sh 文件正在执行 - 只是输出没有执行。
我通过SHELL=/usr/bin/bash
在 crontab 的顶部添加并更改相关行以使用 &>> 输出到日志文件来解决了此问题:
* * * * * /home/josh/test_script.sh &>> /home/josh/cron_logs/test.log
归功于这个答案- 当我意识到问题出在我的命令的输出到文件段时,我找到了它。