从 shell 脚本 cron 中调用 Python 脚本

3

我有一个 shell 脚本 cron,它从同一目录调用一个 python 脚本,但是当这个 cron 执行时,我的 python 脚本没有得到预期的输出,而当我手动执行它时,我的 python 脚本的输出是符合预期的。

我在 shell 脚本中提供了 python 脚本路径,如 /usr/bin/python room_wise.py,并且也将所有 shell 参数都提供了,但是我的 python 脚本仍然没有被 shell 脚本 cron 调用。

有人可以帮我吗?


1
你尝试过使用 /usr/bin/python /path/to/room_wise.py 吗? - Nepho
是的,@Nepho,我已经尝试了这两件事。 - Sid
which python 的输出是 /usr/bin/python,是否符合您的预期? - Nepho
是的,它是 /usr/bin/python。 - Sid
1个回答

3

在cron作业中最大的问题是绝对路径和相对路径。你需要首先按照示例拆分相对路径。

#!/usr/bin/env bash
dirName=`dirname $0`
baseName=`basename $0`
arg1=$1
arg2=$2
cd ${dirName} && python ./room_wise.py arg1 arg2

然后使用 crontab -e 命令为您的用户 cron 作业添加项目,并添加以下内容:

PATH=/usr/bin:/bin:/sbin
30 00 * * * /my/directory/containing/room_wise_py.sh arg1 arg2 > /my/directory/containing/output.log 2>&1

您可以看到我已经添加了PATH,因为在某些操作系统发行版中可能会出现问题。此外,脚本存在于与bash脚本相同的目录中,或者如果您修改bash脚本以包含dirname作为$1,则可以将目录位置作为参数传递。
另外,您可以看到我已经将所有输出重定向到日志文件。这是一个非常好的主意,因为如果发生故障,调试过程有时非常困难。

如果你还没有这样做的话,在你的Python脚本开头记得加上 #!/usr/bin/env python。当在cron中执行bash脚本中的软件时,这也是一个重要的方面需要正确处理。 - Eamonn Kenny
1
管道末尾的2>&1这一行是什么作用? - 3pitt
@3pitt 它还将错误输出重定向到先前指定的日志文件。 - Leland Hepworth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接