Python 我还可以如何对此cron作业进行故障排除?

Python 我还可以如何对此cron作业进行故障排除?,python,cron,freebsd,Python,Cron,Freebsd,我一直在努力(和搜索)让这个cron作业/python脚本运行一段时间了。然而,它显然不起作用。我不知道还有什么其他的方法来解决这个问题,我已经尝试了一些我在其他SO问题中发现的方法 脚本路径:/home/phil/cron\u jobs/octoStatus.py 我希望cron每分钟都能运行 Crontab.txt文件: */1 * * * * python /home/phil/cron_jobs/octoStatus/octoStatus.py &> octolog.txt

我一直在努力(和搜索)让这个cron作业/python脚本运行一段时间了。然而,它显然不起作用。我不知道还有什么其他的方法来解决这个问题,我已经尝试了一些我在其他SO问题中发现的方法

脚本路径:/home/phil/cron\u 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”的输出

它似乎每分钟都在按需要运行。但是,脚本的预期结果并未出现。也没有创建octolog.txt。当我手动运行cron日志中显示的确切语句时,一切正常,并且创建了octolog.txt文件

我在FreeBSD上运行这个,我查看了/var/log/syslog,但它不存在。我是FreeBSD的新手,但我不确定在这种情况下这意味着什么,但我想我应该提一下


我不确定还有什么其他信息会有帮助,因为我被卡住了。谢谢Phil

我建议您使用
append
模式直接从python脚本写入文件


也只是猜测,但我认为您应该给出输出文件的绝对路径,如注释中所述,比如
python home/phil/cron\u jobs/octoStatus/octoStatus.py&>/home/phil/cron\u jobs/octoStatus/octolog.txt
首先,要每分钟运行脚本,您不需要
*/1
。默认情况下,Cron每分钟运行一次,因此:

* * * * * /path/to/command
接下来,您的重定向可能会中断。
bash
手册页在“重定向标准输出和标准错误”下列出了
&
格式,因此我假设您正试图这样做。但是FreeBSD的
/bin/sh
不是bash。因此:

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

这使我们想到:

* * * * * python /home/phil/cron_jobs/octoStatus/octoStatus.py > octolog.txt 2>&1
注意:根据
man 5 crontab
,您可以在crontab文件中设置
MAILTO
变量,该变量将作业的输出/错误定向到电子邮件地址


请注意,
cron
使用的路径可能不包括安装python的
/usr/local/bin
。如果您的
octatus.py
脚本包含一个“shebang”,那么您可以直接执行它。否则,您必须提供
python
二进制文件的完整路径,或者向crontab添加一个path变量(类似于我上面提到的MAILTO)。在所有情况下,您都可以通过阅读
man5crontab

获取有关格式的说明。不确定:但是cron是否设置了路径?意思是:您不应该使用python解释器的绝对路径吗?您已经将crontab的shell设置为/bin/bash了吗
&>
不在较旧的bash版本中,也可能不在cron通常使用的shell中(
/bin/sh
),我想您可能了解了一些情况。我在结构的其他地方创建了一个新目录,并使用绝对路径运行脚本。octolog是在PWD中创建的,捕获的错误与无法在脚本本身中定位所提到的文件有关。出于某种原因,我认为工作目录就是脚本本身的目录。不知道我为什么这么想。这是否意味着脚本中的所有文件都需要绝对路径?我想我可以创建一个工作的_DIR变量并将所有文件附加到该变量的末尾。这是常规程序吗?@Anthon-不,我不知道我需要这么做。我的用户帐户正在使用bashshell。更改crontab shell是否不明智?我想是这样。@pedwards通读
man 5 crontab
您可以在crontab文件中使用
shell=/bin/bash
显式设置shell。谢谢。你的回答,加上hiro的评论,帮助我解决问题。谢谢。虽然我还没有解决所有的问题,但这无疑又让我前进了一步。
* * * * * /path/to/command >/path/to/output.txt 2>&1
* * * * * python /home/phil/cron_jobs/octoStatus/octoStatus.py > octolog.txt 2>&1