我有一个执行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] 删除。
我来说两句