我一直在工作(和搜索)让这个cron job / python脚本运行一段时间了。但是,它显然不起作用。我不确定如何解决原因,我已经尝试了其他SO问题中我发现的一些事情。
脚本路径:/home/phil/cron_jobs/octoStatus.py
我希望cron每分钟都跑一次。
Crontab.txt文件:
*/1 * * * * python /home/phil/cron_jobs/octoStatus/octoStatus.py &> octolog.txt
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)
似乎每分钟都在运行。但是,脚本的预期结果没有发生。 octolog.txt也没有被创建。当我手动运行cron-log中显示的确切语句时,一切都按预期正常工作,并创建了octolog.txt文件。
我在FreeBSD上运行它,然后我去查看/ var / log / syslog,但它不存在。我是FreeBSD的新手,但我不确定在这种情况下这意味着什么,但我想我已经提到了。
我不确定其他哪些信息会有所帮助,因为我被困住了。谢谢。菲尔
答案 0 :(得分:5)
首先,要每分钟运行一次脚本,您不需要*/1
。默认情况下,Cron每分钟运行一次,所以:
* * * * * /path/to/command
接下来,您的重定向可能会被破坏。 bash
手册页在“重定向标准输出和标准错误”下列出了&>
格式,因此我假设您正在尝试这样做。但FreeBSD的/bin/sh
不是bash 。所以:
* * * * * /path/to/command >/path/to/output.txt 2>&1
这会将stdout发送到您的文件,并将stderr复制到stdout。
这将我们带到:
* * * * * python /home/phil/cron_jobs/octoStatus/octoStatus.py > octolog.txt 2>&1
另请注意,根据man 5 crontab
,您可以在crontab文件中设置MAILTO
变量,该变量会将作业中的输出/错误定向到电子邮件地址。
请注意cron
使用的PATH可能不包含/usr/local/bin
,其中安装了python。如果您的octoStatus.py
脚本包含“shebang”,那么您可以直接执行它。否则,您将需要提供python
二进制文件的完整路径,或者向您的crontab添加PATH变量(类似于我上面提到的MAILTO)。在所有情况下,您都可以通过阅读man 5 crontab
来获取有关格式化的说明。
答案 1 :(得分:2)
我建议您使用append
模式直接从python脚本写入文件。
也只是猜测,但我认为你应该给出输出文件的绝对路径,如评论中所述python home/phil/cron_jobs/octoStatus/octoStatus.py &> /home/phil/cron_jobs/octoStatus/octolog.txt