我一直在尝试使用 cron 自动运行 Python 脚本,以了解 PATH。
首先我尝试使用用户 crontab:
crontab -e
我这样设置 crontab:
PYTHONPATH=/home/dpa/anaconda3/bin/python
PATH=/home/dpa/anaconda3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
36 15 * * * python /home/dpa/PycharmProjects/Parser/Parser.py >> /tmp/mycommand.log 2>&1
该脚本不运行,并且出现以下错误:
/bin/sh: 1: python: not found
然后我尝试以超级用户身份:
sudo crontab -e
我这样设置 cronetab:
PYTHONPATH=/home/dpa/anaconda3/bin
PATH=/home/dpa/anaconda3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
43 15 * * * su - dpa python /home/dpa/PycharmProjects/Parser/Parser.py >> /tmp/mycommand.log 2>&1
现在 STDERR 看起来像这样:
-su: python: No such file or directory
答案1
首先,由于您有root
访问权限,我建议您在而不是在主目录中进行编译和anaconda
构建。/opt
您实际上所做的是将变量 PATH 设置为等于该目录列表,并将 PYTHONPATH 设置为等于anaconda
导致问题的可执行文件所在的目录。
为了得到你想要的,更好的方法是成为 root,然后假设你的 shell 是bash
:
export PATH=/home/dpa/anaconda3/bin:$PATH
export LD_LIBRARY_PATH=/home/dpa/anaconda3/lib
export PYTHONHOME=/home/dpa/anaconda3
bash
这将设置路径和库以在包含 anaconda python 及其库的目录中查找并bash
启动一个新会话。然后您可以将python
命令添加到crontab
.
如果您打算像root
这样运行它,那么您不需要su -
,而且最好以您拥有的方式运行它,crontab
并且在您的用户环境中设置,而不是在 的环境中设置。root
PYTHONPATH
PYTHONHOME
root
如果更好的话,您可以将它们全部放入脚本中,然后将脚本本身添加到crontab
.
我再次建议将 anaconda 安装到/opt
用户的主目录中,而不是安装到用户的主目录中。