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

时间:2019-02-20 16:38:14

标签: python bash cron

我已经尝试调试了一段时间,感觉好像我已经尝试了一切。

出于公司原因,对代码稍加修改了***。

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

date\(\"$1\"\)

run.sh只是在virtualenv中运行Python的包装:

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

我已经在Python主程序中放置了一条print语句,以表明它正在执行。

#!/usr/bin/env bash

wd=$(dirname $0)

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

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

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

我没有得到任何书面声明,也没有收到*/30 * * * * /var/www/****/***/run.sh path_to_my/script.py 2>&1 >> /var/www/****/***/test.log 的任何错误输出。

.sh和.py脚本的权限均为755。

除了通过cron运行之外,一切都按预期进行。

我想念什么吗? cron不会为crontab用户使用.bashrc吗?

1 个答案:

答案 0 :(得分:0)

首先通过将以下内容放入crontab文件中,并检查一两分钟后是否在/tmp/env.output中将其写出,以确保本地cronjob正在运行。

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

第二,确保运行crontab的用户有权写入/var/www/****/***/test.log文件

第三次尝试将脚本更改为

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

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