【发布时间】:2018-04-13 14:36:55
【问题描述】:
我在使用 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 以不同方式运行?
【问题讨论】:
-
这是工作目录的问题吗?您在 python 脚本中使用相对路径还是绝对路径?我认为您可以使用
find来查找您的日志和数据。 -
您是否尝试过在 cronjob 中执行错误并将日志输出到某个文件时重定向它们?
-
@Karthikeyan.R.S 是的,我尝试通过管道(重定向标准输出和错误)到日志文件 - 甚至没有创建文件。尝试使用
tee相同的结果。 -
您从哪个用户手动执行?是根还是流氓?
-
@Karthikeyan.R.S 检查系统日志输出,它是用户 rascal
标签: python bash shell cron scrapy