Bash脚本手动执行Python,但不从cron执行

2024-05-14 00:55:04 发布

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

我已经试着调试这个有一段时间了,我觉得我什么都试过了。你知道吗

由于公司原因,代码稍微修改为***。你知道吗

当以本地用户身份从会话运行时,以下命令将按预期执行。你知道吗

/var/www/****/***/run.sh path_to_my/script.py 2>&1 >> /var/www/****/***/test.log

在哪里运行.sh只是在virtualenv中运行Python的包装器:

#!/usr/bin/env bash

wd=$(dirname $0)

source ${wd}/virtualenv/bin/activate
python ${wd}/$1

我在Python main中放置了一个print语句来显示它正在被执行。你知道吗

if __name__ == "__main__":
    print("I got in here...")

以本地用户身份运行命令时,日志将包含此打印语句。但是,在cron中运行时:

*/30 * * * * /var/www/****/***/run.sh path_to_my/script.py 2>&1 >> /var/www/****/***/test.log

我没有得到任何打印的语句,也没有从2>&1接收到任何错误输出。你知道吗

我对.sh和.py脚本的权限都是755。你知道吗

除了通过cron运行外,其他一切都按预期工作。你知道吗

我错过什么了吗?cron不为crontab用户使用.bashrc吗?你知道吗


Tags: topathrunpy命令varmywww
1条回答
网友
1楼 · 发布于 2024-05-14 00:55:04

首先确保您的本地cronjob正在运行,方法是将以下内容放入crontab文件中,并检查它是否在/tmp中写入/环境输出一两分钟后

* * * * * env > /tmp/env.output

其次,确保运行crontab的用户有权写入/var/www/****/***/测试日志文件

第三,尝试将脚本更改为

wd=$(dirname $0)
cd $wd
source activate
python ${wd}/$1

编辑:Anders通过在cron环境中添加PYTHONPATH,能够自己找出答案:export PYTHONPATH="${PYTHONPATH}:${wd}"

相关问题 更多 >