Shell脚本在终端调用Python成功但在Cron中失败

3 投票
2 回答
2175 浏览
提问于 2025-04-16 14:20

我有一个shell脚本,内容如下:

export PYTHONPATH=/usr/local/lib/python
cd /home/skip/workspace/UAM
for file in *.txt
do
    echo $file >>log.fil
    /usr/bin/python push.py -s $file
done
return 0

这个脚本在命令行中运行得很好。它会把每个文件名打印到日志文件里,并且按预期运行python push.py命令。(这个命令会创建一个目录并填充内容。)

但是当我尝试通过cron来运行它,使用这个crontab:

3 * * * * /home/skip/workspace/UAM/RunAllTest.sh 

我在日志文件中看到了记录,但push.py没有正常运行。(目录没有被创建,也没有填充内容。)

任何帮助都会很受欢迎。

2 个回答

1

明白了。感谢licorna的热心帮助。

发生的事情是,我的“push.py”脚本在调用另一个程序(pybot,也就是机器人框架)时,没有指定完整的路径。

我把“pybot”改成了“/usr/local/bin/pybot”,现在一切都正常了。

3

检查一下push.py这个文件是否需要一些环境变量,而这些环境变量在crontab的环境中可能没有被设置。如果是用户的crontab(不是root用户的cron),那么这个文件会像是同一个用户执行的那样运行,但不一定会在同样的环境下运行(比如在初始化文件中设置的别名和路径可能不一样)。

撰写回答