【问题标题】:Crontab Launches Python Script but SystemD Does Not?Crontab 启动 Python 脚本,但 SystemD 没有?
【发布时间】:2020-04-22 12:29:32
【问题描述】:

我可以通过 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 文件中引用了它,如上所述,它抛出了那个错误。

我错过了什么?

【问题讨论】:

  • 你能确认python3.7和python3指向同一个环境吗?
  • 我如何检查才能找出答案?
  • ls -l /usr/bin/python*, which python3
  • 我运行了cd /usr/bin/ 和which python3,它返回了/usr/bin/python3。但是运行ls -l pyth*.* 显示没有名为python3 的文件——只有python3.6、python3.7 等。???
  • @VikR ls -l pyth*.* 找不到 python3,因为它的名称中没有点。试试ls -l /usr/bin/pyth*。

标签: python django unix amazon-ec2 systemd


【解决方案1】:

解决了!

ExecStart='/etc/alternatives/python3' ./manage.py myCronJob --settings=server.settings.production
WorkingDirectory=/opt/myWebapp
User=myUser

用户(上面代码中的“myUser”)可以访问 Django。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 2021-04-03
    • 2017-07-01
    • 1970-01-01
    • 2021-02-10
    • 2018-09-18
    • 1970-01-01
    相关资源
    最近更新 更多