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

bob*_*bob 5 python parameters bash cron

我有一个python应用程序,它使用getopt()来解析参数的命令行.它在交互式bash shell中工作,或者在从命令行调用的bash脚本中工作正常,当通过cron从bash shell脚本中调用时,它不会执行.我正在使用Fedora 15.

当作为cron作业调用时,应用程序失败,在/ var/log/messages中发出以下错误:

myscript.py: abrt: detected unhandled Python exception in myscript.py

看来命令行参数没有正确传递给python脚本.

例如,以下命令行调用正常,将输入文件名设置为"input.txt"并将"log"和"timer"标志设置为所需的值:

python myscript.py -i input.txt --log --timer
Run Code Online (Sandbox Code Playgroud)

当我尝试通过命令行中的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.

任何帮助,将不胜感激!

she*_*ter 4

虽然我同意这两条评论,但调试 crontab 条目问题的一种方法是确保您收到所有错误消息。您正在查看 cron 用户电子邮件文件吗?任何未捕获的 cron 输出都会作为电子邮件发送到用户 ID。(如果用户在 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
Run Code Online (Sandbox Code Playgroud)

回想一下(根据 @cji 的提醒), cron 将使用 /bin/sh (在系统上无论如何都可能最终成为 bash,因此您在命令行上包含的任何变量分配最好像这样完成69 13 05 06 * { var=1 ; export var ; cmds ... ; } ...

我从来没有机会从 crontab 中“获取”环境变量文件,但我希望它能够与. /path/to/envFile.

IHTH