Cron 调用 shell 脚本,该脚本调用 python 脚本

Cron 调用 shell 脚本,该脚本调用 python 脚本

我正在尝试使用 Cron 重复执行 python 脚本。我编写了一个 shell 脚本来调用该/这些 python 脚本。我已将 shell 脚本制作为可执行文件,并且在终端中和只需单击执行即可完美运行。

我已经更改了 Crowntab,以在特定的时间间隔(通常是一两分钟)调用我的 shell 脚本,以查看它是否正常工作。但是,我的脚本似乎没有正确执行。

我的 python 脚本很长,而且它还有调用的本地 python 函数。尽管如此,我还是创建了一个简短的 python 程序以及一个 shell 脚本来调用它,目的是查明 cron 是否正常工作,并且看起来它是否按预期被调用。

为什么我的 python/shell 脚本没有被正确调用执行?如果我调用 shell 脚本,是否还需要包含 cron 才能看到的路径?

我的计划表:

20 13 * * * /my/full/path/to/the/shell_script.sh

我的 shell 脚本/文件:

#!/bin/bash
cd /full/path/to/the/python_script_folder
sudo python3 python_script.py argument

RPi3 /var/log/syslog:

Jan 23 20:13:01 raspberrypi cron[477]: (pi) RELOAD (crontabs/pi)
Jan 23 20:13:01 raspberrypi CRON[3851]: (root) CMD (/etc/myDevices/crontab.sh)
Jan 23 20:13:01 raspberrypi CRON[3854]: (pi) CMD (/my/full/path/to/the/shell_script.sh)

任何帮助表示赞赏。如果您需要任何其他信息,请告诉我。谢谢。

答案1

正如 @thrig 提到的 - sudo 可能会要求输入密码,并bash -x会提供有关执行内容和输出内容的附加信息。首先,重定向 cron 输出是一个很好的做法,例如

20 13 * * * /my/full/path/to/the/shell_script.sh > ${HOME}/cron.log 2>&1

这将为您提供记录在文件中的脚本的输出。

我会:

  1. 将条目放入需要运行它的用户的 crontab 中。
  2. 删除包装器并将命令设置为“python3 /path/to/script.py args”

相关内容