在cons处键入命令时,Cronjobs的运行方式不同(正确)

2024-05-19 17:06:46 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这不太可能是权限问题,因为我正在以自己的身份运行cronjobs。你知道吗

以下是相关细节:

Crontab条目:

0,30 8-18 * * 1-5 python /home/rascal/work/skunkworks/scripts/python/downloaders/make_whoopy.py

0,30 7-18 * * 1-5 /home/rascal/work/skunkworks/scripts/python/scrapers/funny_quotes.sh

0,30 7-20 * * 1-5 /home/rascal/work/skunkworks/scripts/python/scrapers/even_funnier_quotes.sh

/var/log/syslog条目(针对CRON过滤)

Nov  1 09:00:01 BIGBERTHA CRON[8998]: (rascal) CMD (/home/rascal/work/skunkworks/scripts/python/scrapers/funny_quotes.sh)
Nov  1 09:00:01 BIGBERTHA CRON[8999]: (rascal) CMD (/home/rascal/work/skunkworks/scripts/python/scrapers/even_funnier_quotes.sh)
Nov  1 09:00:01 BIGBERTHA CRON[9004]: (rascal) CMD (python /home/rascal/work/skunkworks/scripts/python/downloaders/make_whoopy.py)
Nov  1 09:09:01 BIGBERTHA CRON[9306]: (root) CMD (  [ -x /usr/lib/php/sessionclean ] && /usr/lib/php/sessionclean)
Nov  1 09:09:01 BIGBERTHA CRON[9313]: (root) CMD (  [ -x /usr/lib/php5/maxlifetime ] && [ -x /usr/lib/php5/sessionclean ] && [ -d /var/lib/php5 ] && /usr/lib/php5/sessionclean /var/lib/php5 $(/usr/lib/php5/maxlifetime))
Nov  1 09:17:01 BIGBERTHA CRON[9495]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)

环境(在运行cron作业的服务器上)

rascal@BIGBERTHA:~/work/skunkworks/scripts/python/scrapers$ which python
/usr/bin/python
rascal@BIGBERTHA:~/work/skunkworks/scripts/python/scrapers$ which bash
/bin/bash
rascal@BIGBERTHA:~$ which scrapy
/usr/local/bin/scrapy

好笑_报价.sh

#!/bin/bash

. /home/rascal/.profile

cd /home/rascal/work/skunkworks/scripts/python/scrapers

scrapy crawl funny_quotes

在命令提示符下运行…

rascal@BIGBERTHA:~$ /home/rascal/work/skunkworks/scripts/python/scrapers/funny_quotes.sh 
2017-11-01 09:57:05 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: scrapers)
2017-11-01 09:57:05 [scrapy.utils.log] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'scrapers.spiders', 'SPIDER_MODULES': ['scrapers.spiders'], 'BO
T_NAME': 'scrapers'}
2017-11-01 09:57:05 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.memusage.MemoryUsage',
 'scrapy.extensions.logstats.LogStats',
 'scrapy.extensions.telnet.TelnetConsole',
 'scrapy.extensions.corestats.CoreStats']
...

为什么通过cron运行作业的方式不同?你知道吗


Tags: cmdhomelibusrshscriptsnovcron
3条回答

据我所知,我们不是做bash funny_quotes.sh而不是仅仅做funny_quotes.sh

2)更改cron命令

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

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

和这个一样

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

cd /home/rascal/work/skunkworks/scripts/python/scrapers/ && bash funny_quotes.sh

3)检查cron日志

grep CRON /var/log/syslog

我确信你得到了类似于scrapy - command not found或类似的错误。你知道吗

要解决这个问题,就这么做

输入并从shell复制echo $PATH的输出。你知道吗

然后打开crontab -e

在文件的最上面,写PATH=YOUR_COPIED_CONTENTS

这应该管用。你知道吗

原来这和环境问题有关。Cron向syslog报告它已经运行了作业,但是没有创建任何文件/日志文件。你知道吗

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

scrapy: command not found

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

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

您可以为cron创建自定义日志。你知道吗

0,30 8-18 * * 1-5 python /home/.../make_whoopy.py /home/make_whoopy.py.log 2>&1

这将发送stderr和stdout_呜呜.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\u whoopy将在syslog上创建一个名为make\u whoopy的标记。你知道吗

相关问题 更多 >