安装python包供root用户使用

时间:2016-02-25 02:35:14

标签: python ubuntu pip systemd

我已经阅读了所有内容,但仍然无法让我的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用户使用?

1 个答案:

答案 0 :(得分:0)

行。感谢jcomeau_ictx,我发现了问题所在。默认情况下,pip在本地安装。这个post详细讨论了如何安装全系统(TL; DR apt-get。)。这是为root用户安装的。我不想搞乱虚拟环境,它只是一个依赖性很小的模块。