我已经尝试调试了一段时间,感觉好像我已经尝试了一切。
出于公司原因,对代码稍加修改了***。
以本地用户身份从会话运行时,以下命令将按预期执行。
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吗?
答案 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}"