我怎么能解决这个cron工作?

ped*_*rds 3 python cron freebsd

我一直在工作(和搜索)让这个cron job/python脚本运行一段时间了.但是,它显然不起作用.我不确定如何解决原因,我在其他SO问题中尝试了几个我在这里找到的东西.

脚本的路径:/home/phil/cron_jobs/octoStatus.py

我希望cron每分钟都跑一次.

Crontab.txt文件:

*/1 * * * * python /home/phil/cron_jobs/octoStatus/octoStatus.py &> octolog.txt
Run Code Online (Sandbox Code Playgroud)

octolog.txt用于捕获STDOUT和STDERR信息.输出"sudo tail/var/log/cron"

Jul  3 10:20:00 bsd /usr/sbin/cron[83876]: (root) CMD (/usr/libexec/atrun)
Jul  3 10:20:00 bsd /usr/sbin/cron[83877]: (phil) CMD (python /home/phil/cron_jobs/octoStatus/octoStatus.py &> octolog.txt)
Jul  3 10:21:00 bsd /usr/sbin/cron[83903]: (phil) CMD (python /home/phil/cron_jobs/octoStatus/octoStatus.py &> octolog.txt)
Jul  3 10:22:00 bsd /usr/sbin/cron[83934]: (phil) CMD (python /home/phil/cron_jobs/octoStatus/octoStatus.py &> octolog.txt)
Run Code Online (Sandbox Code Playgroud)

它似乎按照需要每分钟运行一次.但是,脚本的预期结果没有发生.octolog.txt也没有被创建.当我手动运行cron-log中显示的确切语句时,一切都按预期正常工作,并创建octolog.txt文件.

我在FreeBSD上运行它,然后我去查看/ var/log/syslog,但它不存在.我是FreeBSD的新手,但我不确定在这种情况下这意味着什么,但我想我会提到它.

我不确定其他信息会有什么帮助,因为我被困住了.谢谢.菲尔

gho*_*oti 5

首先,每分钟运行一次脚本,你不需要*/1.默认情况下,Cron每分钟运行一次,因此:

* * * * * /path/to/command
Run Code Online (Sandbox Code Playgroud)

接下来,您的重定向可能会被破坏.该bash手册页有&>下"重定向标准输出和标准错误"中列出的格式,所以我认为这是你想要做什么.但是FreeBSD /bin/sh 不是bash.所以:

* * * * * /path/to/command >/path/to/output.txt 2>&1
Run Code Online (Sandbox Code Playgroud)

这会将stdout发送到您的文件,并将stderr复制到stdout.

这让我们:

* * * * * python /home/phil/cron_jobs/octoStatus/octoStatus.py > octolog.txt 2>&1
Run Code Online (Sandbox Code Playgroud)

另请注意man 5 crontab,您可以MAILTO在crontab文件中设置一个变量,该变量会将作业中的输出/错误定向到电子邮件地址.

请注意,安装python的地方cron可能不包含PATH /usr/local/bin.如果您的octoStatus.py脚本包含"shebang",那么您可以直接执行它.否则,您将需要提供python二进制文件的完整路径,或者向您的crontab添加一个PATH变量(类似于我上面提到的MAILTO).在所有情况下,您都可以通过阅读获得格式化说明man 5 crontab.