如何使用 crontab 运行运行 Python 脚本的 Bash 脚本

Posted

技术标签:

【中文标题】如何使用 crontab 运行运行 Python 脚本的 Bash 脚本【英文标题】:How to run a Bash script that runs Python scripts using crontab 【发布时间】:2022-01-05 05:00:44 【问题描述】:

我有一个 Bash 脚本,其中调用了两个 Python 脚本。在使用 crontab 时,Bash 脚本运行得很好,但 Python 脚本不做任何事情,就好像它们没有被调用或解释一样。我知道这一切都可以用 Python 完成,但我想学习一些 Bash,所以我决定将它们混合使用。

问题可能是什么?很难找到答案,因为没有人会混合使用 Bash 和 Python,因为它绝对不是有用的东西。

我的 crontab 是这样的:

10 * * * * cd ~/directory && /bin/bash ~/directory/script.sh >> output.txt

通过查看我使用 Bash 创建的 log.txt 文件(代码如下),我可以看到 Python 没有做任何事情

Bash 脚本如下所示:

#! /bin/bash
...
var=$(python3 app.py)
...
now=$(date + ...)
echo $now $var >> log.txt

代码在终端中运行良好,我还有一个 venv 和环境变量,所以我不知道这会有多大影响。

(我将 output.txt 放在 crontab 中只是为了调试,如果程序正常工作,我只会在脚本中使用 log.txt)。

【问题讨论】:

哪个目录包含app.py和哪个python3 app.py和script.sh在同一目录,python3在usr/bin/ 这可能会有所帮助:How to debug a bash script? 这可能会有所帮助:将 >> output.txt 替换为 >> output.txt 2>&1 感谢您的帮助。显然环境变量没有被读取或者包有一些错误,所以问题肯定出在 venv 或环境变量中。现在我只需要找到它 【参考方案1】:

(代表问题作者发布解决方案,将其移至答案空间)

crontab 无法访问我在 .bashrc 中声明的环境变量。在 crontab -e 中声明变量在我的操作系统 Fedora Linux 35 中有效。

ENV_VAR="a"
ENV_VAR2="b"
10 * * * * cd ~/directory && /bin/bash ~/directory/script.sh >> output.txt

如果您的 Python 脚本中有 env 变量并使用 Fedora 35 遇到相同的问题,可能会起作用。

【讨论】:

以上是关于如何使用 crontab 运行运行 Python 脚本的 Bash 脚本的主要内容,如果未能解决你的问题,请参考以下文章

从 crontab 在 vi​​rtualenv 中运行 python 方法

Crontab定时运行python程序

使用 anaconda 环境运行 crontab 作业

关于linux系统下CRONTAB运行python脚本不生效

Python 脚本未在 crontab 中运行调用 pysaunter

使用 crontab 运行 tkinter GUI