Установите пакет python для использования пользователем root

Я прочитал все, и я все еще не могу запустить свой скрипт Python в systemd. Вот сценарий оболочки, который я использую:

#! /bin/sh
cd /home/albert/speedcomplainer
/usr/bin/python speedcomplainer.py

Я могу выполнить скрипт (/usr/bin/speedcomplainer), он отлично работает из командной строки. Скрипт на Python вечно зацикливается, проверяя скорость моего интернета. Как я уже сказал, он работает нормально, напрямую из командной строки (python...) или из сценария оболочки, который я создал в usr/bin.

Но когда я помещаю его в этот модульный файл:

# 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?


person Marc    schedule 25.02.2016    source источник
comment
Где установлен модуль twitter?   -  person larsks    schedule 25.02.2016
comment
Я установил модуль Twitter, используя pip из командной строки. (без виртуальной среды и т. д.)   -  person Marc    schedule 25.02.2016
comment
Кстати, я могу сделать сценарий доступным. но поскольку он хорошо работает сам по себе, я не думаю, что это уместно.   -  person Marc    schedule 25.02.2016
comment
вы устанавливали с pip install --user twitter? и работает ли systemd от имени пользователя root? если да, то это ваша проблема.   -  person jcomeau_ictx    schedule 25.02.2016
comment
Я не устанавливал с - пользователем. Насколько я понимаю, Systemd работает как root   -  person Marc    schedule 25.02.2016


Ответы (1)


ХОРОШО. Благодаря jcomeau_ictx я понял проблему. pip по умолчанию устанавливается локально. В этом сообщении подробно описано, как установить общесистемные ( TL;DR apt-get.). Это установлено для пользователя root. Я не хотел связываться с виртуальной средой, а это всего лишь один модуль с несколькими зависимостями.

person Marc    schedule 25.02.2016