Python 在控制台键入命令时,Cronjobs的运行方式不同(正确)

Python 在控制台键入命令时,Cronjobs的运行方式不同(正确),python,bash,shell,cron,scrapy,Python,Bash,Shell,Cron,Scrapy,我在crontab中遇到了一个奇怪的问题:我在crontab中有正确的条目,设置了正确的路径,但是当作业通过crontab运行时,它们的运行方式不同,例如,不会生成日志文件,也不会将数据写入文件。但是,当我在命令行中键入确切的命令时,脚本按预期工作 这不太可能是权限问题,因为我自己正在运行cronjobs 有关详情如下: Crontab条目: /为CRON筛选的var/log/syslog条目 运行cron作业的服务器计算机上的环境 好笑的引用 正在命令提示符下运行。。。 为什么通过cron运行

我在crontab中遇到了一个奇怪的问题:我在crontab中有正确的条目,设置了正确的路径,但是当作业通过crontab运行时,它们的运行方式不同,例如,不会生成日志文件,也不会将数据写入文件。但是,当我在命令行中键入确切的命令时,脚本按预期工作

这不太可能是权限问题,因为我自己正在运行cronjobs

有关详情如下:

Crontab条目: /为CRON筛选的var/log/syslog条目 运行cron作业的服务器计算机上的环境 好笑的引用 正在命令提示符下运行。。。 为什么通过cron运行作业的方式有所不同?

1据我所知,我们不是要使用bash-fully\u-quotes.sh而不是fully\u-quotes.sh吗

2将您的cron命令从

python /home/rascal/work/skunkworks/scripts/python/downloaders/make_whoopy.py

和这个一样

/home/rascal/work/skunkworks/scripts/python/scrapers/funny_quotes.sh

3检查您的cron日志

grep CRON /var/log/syslog
我敢肯定,您会遇到类似“未找到scrapy-command”或类似的错误

要修复它,请执行此操作

输入并从shell复制echo$PATH的输出

然后打开crontab-e

在文件的最顶端,write PATH=您的\u复制的\u内容


这应该是可行的。

您可以为cron创建自定义日志

0,30 8-18 * * 1-5 python /home/.../make_whoopy.py /home/make_whoopy.py.log 2>&1
这将发送stderr和stdout以生成_whoopy.py.log

如果要在屏幕脏解决方案中查看输出

0,30 8-18 * * 1-5 python /home/.../make_whoopy.py > /dev/pts/1
当然,当您登录并且必须根据您的tty更改/dev/pts/1时,这将起作用

另一种选择是邮寄

0,30 8-18 * * 1-5 python /home/.../make_whoopy.py > /dev/null 2>&1 | mail -s "cron output" you@example.org
最重要的是将输出发送到syslog

0,30 8-18 * * 1-5 python /home/.../make_whoopy.py | /usr/bin/logger -t make_whoopy

-t make_whoopy将在syslog上创建一个名为make_whoopy的标记。

结果表明,这与环境问题有关。Cron向syslog报告它已经运行了作业,但没有创建任何文件/日志文件

最终,我解决这个问题的方法是在我的crontab中添加一个MAILTO=username。完成此操作后,当作业运行失败时,我看到错误消息:

scrapy:未找到命令

然后,我通过在bash脚本中添加以下语句来解决此问题:

路径=$PATH:/usr/local/bin/


这是工作目录的问题吗?在python脚本中使用相对路径还是绝对路径?我想您可以使用find来查找日志和数据。在cronjob中执行错误日志和输出日志时,您是否尝试将它们重定向到某个文件?@Karthikeyan.R.S是的,我尝试将stdout和err重定向到日志文件-甚至没有创建文件。尝试使用相同的结果。您正在从哪个用户手动执行?它是root还是rascal?@Karthikeyan.R.S check syslog output,它是用户rascal。您建议的命令是我最初在crontab中使用的。我使用pipes/redirection/tee等摆脱了链接命令和管道输出到日志文件。我当时存在的问题,我错误地认为,将命令简化为单个命令可以解决问题。简言之,我已经尝试了你的建议——我遇到了与我在这个问题中报告的相同的问题。另外,我有一个syslog条目-cron肯定没有运行任何报告的错误,而且,您可以看到scrapy等位于用户rascal的路径中。这有什么意义?。我已经在运行的shell脚本中寻找我的整个环境。@HomunculusReticulli嘿,我仍然相信尝试我在第3点中的建议。。。你只需要5分钟。。。也许它可以为您节省大量调试时间:P
/home/rascal/work/skunkworks/scripts/python/scrapers/funny_quotes.sh
cd /home/rascal/work/skunkworks/scripts/python/scrapers/ && bash funny_quotes.sh
grep CRON /var/log/syslog
0,30 8-18 * * 1-5 python /home/.../make_whoopy.py /home/make_whoopy.py.log 2>&1
0,30 8-18 * * 1-5 python /home/.../make_whoopy.py > /dev/pts/1
0,30 8-18 * * 1-5 python /home/.../make_whoopy.py > /dev/null 2>&1 | mail -s "cron output" you@example.org
0,30 8-18 * * 1-5 python /home/.../make_whoopy.py | /usr/bin/logger -t make_whoopy