加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何将bash参数传递给cron作业中的python脚本?

发布时间:2020-12-16 22:18:08 所属栏目:Python 来源:网络整理
导读:我有一个python应用程序,它使用getopt()来解析参数的命令行.它在交互式bash shell中工作,或者在从命令行调用的bash脚本中工作正常,当通过cron从bash shell脚本中调用时,它不会执行.我正在使用Fedora 15. 当作为cron作业调用时,应用程序失败,在/ var / log /

我有一个python应用程序,它使用getopt()来解析参数的命令行.它在交互式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.

任何帮助,将不胜感激!

最佳答案
虽然我同意这两个注释,但调试crontab条目问题的一种方法是确保收到所有错误消息.你在看cron用户的电子邮件文件吗?来自cron的任何未捕获输出都将作为电子邮件发送到userID. (如果用户在cron’ed机器上没有电子邮件帐户,则这是一个单独的问题).

无论如何,我发现明确捕获输出很有帮助.如果我没有得到输出文件(至少零大小的文件),那么我知道crontab甚至没有运行.

这是一个示例crontab条目设置来捕获所有输出.

59 13 05 06 * { /usr/bin/python /path/to/myscript.py -i /path/to/input.txt --log --timer ; } > /tmp/myProj/myscriptPY.trace.`/bin/date +%Y%m%d.%H%M` 2>&1

回想一下(根据@cji的提醒),cron将使用/ bin / sh(无论如何系统上都可能会出现bash,所以你在命令行中包含的任何变量都会更好,比如69 13 05 06 * {var = 1;导出var; cmds …;} …

我从来没有机会从crontab“获取”环境变量文件,但我希望它可以使用. /路径/到/ envFile.

IHTH

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读