首页 文章

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

提问于
浏览
0

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

这不太可能是权限问题,因为我正在运行自己的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

funny_quotes.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以不同的方式运行工作?

3 回答

  • 0

    1) 据我所知,我们不是做 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

    那应该有用 .

  • 0

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

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

    这会将stderr和stdout发送到make_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的标记 .

  • 0

    事实证明,这与环境问题有关 . Cron向syslog报告它已经运行了该作业,但没有创建任何文件/日志文件 .

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

    scrapy:找不到命令

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

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

相关问题