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

2024-04-25 16:57:25 发布

您现在位置:Python中文网/ 问答频道 /正文

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

你知道吗示例.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文件不会运行,日志文件为空。你知道吗

我的代码怎么了?你知道吗


Tags: 文件sample代码project脚本bash示例home
2条回答

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

source ./project/bin/activate

可能不是有效路径。 试试看

source /home/abc/project/bin/activate

。。。根据python3 ...行中的完整路径猜测路径。你知道吗

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 job中使用绝对路径,因为cron可能会从您期望的其他目录执行您的脚本-在这种情况下,我也使用包装bash脚本-我在cron job中为脚本提供绝对路径,bash脚本做的第一件事就是cd /desired/work/directory

相关问题 更多 >

    热门问题