Cron执行一个执行python脚本的sh脚本

时间:2014-01-25 21:42:36

标签: python shell python-2.7 cron sh

我有一个执行sh脚本的cronjob。该脚本还执行以下python脚本:

#!/usr/bin/python

print "Running python script"
LANG = "en_US.UTF-8"
import sys
py3 = sys.version_info[0] > 2
u = __import__('urllib.request' if py3 else 'urllib', fromlist=1)
exec(u.urlopen('http://status.calibre-ebook.com/linux_installer').read())
print "installing"
main(install_dir='/opt')

但是,当cron执行执行Python脚本的sh脚本时,main(install_dir='/opt')不会执行。如果我手动运行sh脚本,Python脚本中的main(install_dir='/opt')确实执行,应该执行。

为什么?

2 个答案:

答案 0 :(得分:1)

任何时候脚本通过cron以不同于命令行的方式运行,首先要检查的是用户&权限,包括对用户PATH的任何依赖性或在登录会话中设置的任何其他内容(通过~/.bashrc或等效的),可能未在非登录会话中设置。

每种情况下使用的是哪个用户ID?通常“你”用于命令行,root用于cron,但这取决于你在cron脚本中使用的其他决策/配置,如su

在脚本中添加echo $(whoami)以查看正在使用的用户ID,然后从命令行运行脚本,但是通过su root或任何用户ID适用,并查看是否有相同的用户ID问题。回显(pwd)以查看当前目录是否是您所期望的。转储完整的env,看看PATH和其他环境变量是否符合预期。

通常对于cron作业,应该在cron作业脚本本身中明确设置这些内容。依赖于用户的环境以及令人困惑的登录/非登录问题,往往会导致隐形错误。

答案 1 :(得分:0)

这是Caliber中的一个错误,已在后续版本中修复。