Cron执行执行python脚本的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')

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

为什么?

克里斯·约翰逊

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

在每种情况下都使用什么用户ID?通常,命令行中使用“ you”,cron中使用“ root”,但这取决于您su在cron脚本中采用的其他决策/配置

echo $(whoami)在脚本中添加一个,以查看正在使用的用户ID,然后从命令行运行该脚本,但要通过su root或应用任何用户ID来运行,并查看是否存在相同的问题。回显,(pwd)以查看当前目录是否符合您的期望。转储全部文件,env然后查看PATH和其他环境变量是否符合您的期望。

通常,对于cron作业,应该在cron作业脚本本身中显式设置这些内容。依靠用户的环境以及令人困惑的登录/非登录问题,通常会导致看不见的错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章