【问题标题】:Calling a python script from shell script cron从 shell 脚本 cron 调用 python 脚本
【发布时间】:2018-03-25 12:36:04
【问题描述】:

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

我提供了 python 脚本路径,例如 /usr/bin/python room_wise.py

并在 shell 脚本中给出了所有 shell 参数,但我的 python 脚本仍然没有使用 shell 脚本 cron 调用。

有人可以帮我吗?

【问题讨论】:

  • 你试过/usr/bin/python /path/to/room_wise.py吗?
  • 是的@Nepho,这两种方法我都试过了,
  • which python/usr/bin/python的输出是否符合预期?
  • 对,就是/usr/bin/python

标签: python bash shell cron


【解决方案1】:

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 脚本执行软件时正确处理的一个重要方面。
  • 2>&1 行在管道末端做什么?
  • @3pitt 它还将错误输出重定向到先前指定的日志文件
猜你喜欢
  • 2011-07-22
  • 1970-01-01
  • 2019-10-31
  • 2020-10-02
  • 1970-01-01
  • 2011-08-15
  • 2016-06-22
  • 2014-06-05
  • 2012-01-23
相关资源
最近更新 更多