通过cron从bash脚本内部运行python文件

通过cron从bash脚本内部运行python文件,python,bash,python-3.x,shell,cron,Python,Bash,Python 3.x,Shell,Cron,我创建了一个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文件不会执行。 克朗: 当这个cron在指定的时间触发时,b

我创建了一个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文件不会执行。 克朗:

当这个cron在指定的时间触发时,bash脚本中的python文件不会运行,日志文件为空


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

很可能是您在源代码命令中使用的相对路径。Cron将从不同的目录运行脚本,因此

source ./project/bin/activate
可能不是有效的路径。 试一试


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

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

最常见的问题是:

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

尝试提供python的完整路径。例如:/usr/bin/python3/home/abc/project/server/sample。py@Rakesh给出完整的Python路径给了我这个错误:
SyntaxError:unknown decode error
看起来这个错误来自您的脚本我尝试给出激活虚拟环境的绝对路径,但这似乎没有解决我的问题。
source ./project/bin/activate
source /home/abc/project/bin/activate