我已经阅读了所有内容,但仍然无法让我的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
AHAHA !! python脚本中的导入错误。
但等等 - 它适用于其他地方。为什么只有从systemd运行时才会收到导入错误? (答案 - 模块是在本地安装的。下一个问题:)
行。按照@jcomeau_ictx引导我的路径,似乎pip安装到我的本地用户目录。如何安装模块以供root用户使用?
答案 0 :(得分:0)
行。感谢jcomeau_ictx,我发现了问题所在。默认情况下,pip在本地安装。这个post详细讨论了如何安装全系统(TL; DR apt-get。)。这是为root用户安装的。我不想搞乱虚拟环境,它只是一个依赖性很小的模块。