我有一个使用 getopt() 解析命令行参数的 Python 应用程序。在交互式 bash shell 或从命令行调用的 bash 脚本中都正常工作,但是当通过 cron 在 bash shell 脚本内调用时将无法执行。我正在使用 Fedora 15。
当作为 cron 作业调用时,应用程序会失败,并在 /var/log/messages 中发出以下错误:
myscript.py:abrt:在 myscript.py 中检测到未处理的 Python 异常
看起来命令行参数没有正确地传递给 Python 脚本。
例如,以下命令行调用可以正常工作,将输入文件名设置为 "input.txt" 并将 "log" 和 "timer" 标志设置为所需值:
python myscript.py -i input.txt --log --timer
当我尝试通过命令行中的bash脚本调用程序时,bash脚本可以正常工作。但是当我尝试通过cron运行bash脚本时,执行会失败并出现上述错误。
我不知道为什么shell脚本通过cron无法正确执行。在用于cron作业的bash脚本中使用完整路径名,因此环境路径不应该是问题:
“/usr/bin/python /path/to/myscript.py -i /path/to/input.txt --log --timer”
我认为这种语法在通过cron调用的bash脚本中使用时可能会将脚本的参数传递给python而不是myscript.py。
如有帮助,不胜感激!
cron(8)
中运行脚本和程序时遇到问题时,错误更常来自于缺失环境变量。因此我并不认为这是参数解析的问题。尝试找出有关未处理的异常的更多详细信息:将整个脚本用try
/catch
块包装起来,并将异常的详细信息保存到磁盘上。 - sarnold/bin/bash -c "/path/to/python /path/to/script ..."
。这可能有所帮助,但只是猜测-我之前遇到类似的问题,直到意识到cron使用/bin/sh来执行它的命令。 - cji