我可以通过ssh登录到我的AWS EC2服务器并输入:
cd /opt/myWebApp
sudo python3 /opt/myWebApp/manage.py myCronJob
...它运行。
我也可以通过crontab启动相同的脚本:
0 */6 * * * sudo python3 /opt/myWebApp/manage.py myCronJob --settings=server.settings.production
但是当我尝试在SystemD中使用.service文件运行它时:
ExecStart='/usr/bin/python3.7' /opt/myWebApp/manage.py myCronJob --settings=server.settings.production
...我得到:
[ImportError:无法导入Django。您确定已在PYTHONPATH环境变量中安装并使用该变量吗?您忘了激活虚拟环境吗?
$PYTHONPATH
和$VIRTUAL_ENV
为空。 /opt/myWebApp/server_venv
也为空。 /usr/bin/python3.7
处有一个python,但如上所述,我在SystemD .service文件中引用了它,并引发了该错误。
我想念什么?
解决了!
ExecStart='/etc/alternatives/python3' ./manage.py myCronJob --settings=server.settings.production
WorkingDirectory=/opt/myWebapp
User=myUser
该用户(以上代码中的'myUser')有权访问Django。