Cron任务调用bash脚本和python脚本
好的,我有一个bash脚本,它的功能很简单,就是下载一个网页,然后我用Python从下载的网页中提取一些数据。
我的bash脚本大概是这样的:
#!/bin/bash
html_file="web_page.html"
wget -O /home/michael/Documents/CS288/homework7/web_page.html http://markets.usatoday.com/custom/usatoday-com/html-mktscreener.asp?exchange=13\&screen=1
python hw_7_2.py $html_file
现在,当我在命令行中直接执行这个bash脚本时,一切运行得很好,wget命令可以正常执行,然后我的Python脚本也会运行。然而,当我把它设置为定时任务(cron job)时,wget会运行,但Python脚本却从来没有执行过。
我其实没有太多设置定时任务的经验,所以我觉得这可能是问题所在。我的crontab文件大致是这样的:
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
* * * * * michael /home/michael/Documents/CS288/homework7/usatoday_runner.sh
3 个回答
1
你的脚本可能没有设置一些环境变量。当定时任务(cron job)运行时,它不会加载你平常使用的配置文件,比如 .profile 或 .bashprofile(这些文件里通常会设置一些简单的路径,比如 JAVA_HOME 等)。一个可能的解决办法是让你的脚本去读取这些配置文件。
1
Cron经常出问题,主要是因为$PATH
和工作目录相关的麻烦。你虽然设置了$PATH
,但如果你不在正确的目录下,我也不奇怪你的bash脚本或python脚本都无法正常运行。
试着使用更多的绝对路径,看看这样是否能解决问题。同样,你也可以尝试从/
目录或者其他地方自己运行一下你的cron命令,看看能否正常工作。
2
试着把定时任务的那一行替换成:
* * * * * michael /home/michael/Documents/CS288/homework7/usatoday_runner.sh > /tmp/why_is_this_failing.log 2>&1
答案可能在这个文件里:/tmp/why_is_this_failing.log