【问题标题】:Running python file from inside a bash script through cron通过 cron 从 bash 脚本内部运行 python 文件
【发布时间】:2018-08-23 21:36:12
【问题描述】:

我创建了一个 bash 脚本,它首先激活一个 python 虚拟环境,然后运行一个 python 文件。当我手动执行 bash 脚本时,python 文件按预期运行。 Bash 脚本代码:

sample.sh

#!/usr/bin/env bash

source ./project/bin/activate
python3 /home/abc/project/server/sample.py

但是,当我尝试使用 cron 运行此 bash 脚本时,python 文件不会执行。 定时任务:

16 12 * * * /home/abc/sample.sh > /home/abc/bulkcat.log 2>&1

当这个 cron 在指定时间触发时,我的 bash 脚本中的 python 文件没有运行,并且日志文件为空。

我的代码似乎有什么问题?

【问题讨论】:

  • 尝试给出 python 的完整路径。例如:/usr/bin/python3 /home/abc/project/server/sample.py
  • @Rakesh 提供完整的 Python 路径给了我这个错误:SyntaxError: unknown decode error
  • 看起来错误来自您的脚本

标签: python bash python-3.x shell cron


【解决方案1】:

这很可能是您在 source 命令中使用的相对路径。 Cron 会从不同的目录运行你的脚本,所以

source ./project/bin/activate

可能不是有效路径。 试试

source /home/abc/project/bin/activate

...根据python3 ... 行中的完整路径猜测的路径。

【讨论】:

  • 我尝试提供激活虚拟环境的绝对路径,但这似乎并没有解决我的问题。
【解决方案2】:

Cron 写入日志,您可以找到它尝试执行任务时发生的错误 - this question 的回答提到了查找这些日志的常用位置。

最常见的问题是:

  • cron 正在使用 sh 而不是 bash 忽略脚本中的 shebang - 您可以尝试配置您的 cron 作业,例如 6 12 * * * /bin/bash /home/abc/sample.sh > /home/abc/bulkcat.log 2>&1
  • 脚本没有可执行权限集 - 这可以通过运行 chmod 700 /home/abc/sample.shchmod 755 /home/abc/sample.sh 来解决 - 只有当您希望允许其他用户读取和执行您的脚本时才应使用后者
  • 正如另一个答案中已经提到的,始终在 cron 作业中使用绝对路径,因为 cron 可能会从其他目录执行您的脚本,而不是您期望的 - 在这种情况下,我也在使用包装 bash 脚本 - 我给出了脚本的绝对路径cron 任务和 bash 脚本做的第一件事是 cd /desired/work/directory

【讨论】:

    猜你喜欢
    • 2016-10-01
    • 2023-03-06
    • 2013-11-26
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 2019-07-23
    • 2012-04-20
    相关资源
    最近更新 更多