我已经阅读了所有内容,但我仍然无法让我的 python 脚本在 systemd 中运行。
这是我使用的 shell 脚本:
#! /bin/sh
cd /home/albert/speedcomplainer
/usr/bin/python speedcomplainer.py
我可以执行脚本(
/usr/bin/speedcomplainer
),它从命令行运行得很好。 python 脚本永远循环,检查我的网速。正如我所说,它运行良好,直接从命令行(python ...)或从我在 usr/bin 中创建的 shell 脚本运行。但是当我把它放到这个单元文件中时:
# speedcomplianer - checks and tweets comcast speeds.
#
#
[Unit]
Description=Ethernet Speed Complainer
After=syslog.target network.target
[Service]
Type=simple
WorkingDirectory=/home/albert/speedcomplainer
ExecStart=/usr/bin/speedcomplainer
Restart=always
StandardOutput=syslog
StandardError=syslog
[Install]
WantedBy=multi-user.target
它无法启动(
sudo systemctl start speedcomplainer.service
)并出现以下错误: speedcomplainer.service - Ethernet Speed Complainer
Loaded: loaded (/lib/systemd/system/speedcomplainer.service; enabled; vendor preset: enabled)
Active: failed (Result: start-limit) since Wed 2016-02-24 20:21:02 CST; 7s ago
Process: 25325 ExecStart=/usr/bin/speedcomplainer (code=exited, status=1/FAILURE)
Main PID: 25325 (code=exited, status=1/FAILURE)
我用
journalctl -u speedcomplainer
查看日志和 :Feb 24 20:21:02 haven systemd[1]: Started Ethernet Speed Complainer.
Feb 24 20:21:02 haven speedcomplainer[25325]: Traceback (most recent call last):
Feb 24 20:21:02 haven speedcomplainer[25325]: File "speedcomplainer.py", line 9, in <module>
Feb 24 20:21:02 haven speedcomplainer[25325]: import twitter
Feb 24 20:21:02 haven speedcomplainer[25325]: ImportError: No module named twitter
Feb 24 20:21:02 haven systemd[1]: speedcomplainer.service: Main process exited, code=exited, status=1/FAILURE
Feb 24 20:21:02 haven systemd[1]: speedcomplainer.service: Unit entered failed state.
Feb 24 20:21:02 haven systemd[1]: speedcomplainer.service: Failed with result 'exit-code'.
Feb 24 20:21:02 haven systemd[1]: speedcomplainer.service: Service hold-off time over, scheduling restart.
Feb 24 20:21:02 haven systemd[1]: Stopped Ethernet Speed Complainer
啊哈哈!! python 脚本中的导入错误。
但是等等 - 它适用于其他任何地方。为什么只有从 systemd 运行时才会收到导入错误? (答案 - 模块安装在本地。下一个问题:)
好的。在遵循@jcomeau_ictx 引导我的路径之后,似乎 pip 安装到了我的本地用户目录。如何安装模块以供 root 使用?
最佳答案
好的。感谢 jcomeau_ictx , 我解决了这个问题。 pip 默认安装在本地。这个post详细讨论了如何在系统范围内安装 (TL;DR apt-get.)。这是为 root 用户安装的。我不想弄乱虚拟环境,它只是一个几乎没有依赖关系的模块。
关于python - 安装python包供root用户使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35617187/