Python Script не запускает Bash Script при запуске как сервис - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть скрипт Python, который запускается автоматически как служба (активируется с помощью systemd). В этом скрипте Python я вызываю скрипт bash, используя subprocess.call(script_file,shell=True).

Когда я вызываю скрипт python вручную ($ python my_python_script.py), все работает отлично. Однако автоматически запускаемая программа не выполняет сценарий bash (однако он запускается, я проверил это, заставляя его редактировать текстовый файл, что и происходит).

Я (думаю) дал всем права на чтение и запись сценариев bash. У кого-нибудь есть идеи относительно того, что я делаю неправильно?

Приложение: Я хочу написать небольшой скрипт, который отправляет мне мой публичный IP-адрес через телеграмму. Сервисный файл выглядит так:

[Unit]
Description=IPsender
After=networking.service

[Service]
Type=simple
User=root
WorkingDirectory=/home/pi/projects/tg_bot
ExecStart=/home/pi/miniconda3/bin/python /home/pi/projects/tg_bot/ip_sender_tg.py
Restart=always


[Install]
WantedBy=multi-user.target

1 Ответ

0 голосов
/ 12 сентября 2018

Protawn, добро пожаловать в Unix и Linux StackExchange.

Почему скрипты работают по-разному в системе - это распространенный вопрос. Проверьте этот ответ на общий вопрос в другом месте на сайте.

Без исходного кода для ваших сценариев Python и Bash трудно догадаться, с какой разницей вы столкнулись.

Мое личное предположение состоит в том, что ваш bash скрипт вызывает некоторые другие двоичные файлы без полных путей, и эти пути находятся в вашей оболочке $PATH, но не по умолчанию systemd path.

Добавьте set -x в начало вашего bash-сценария, чтобы все действия были записаны в стандартный вывод, который будет записан в журнале systemd. Затем, после сбоя, используйте journalctl -u your-service-name, чтобы просмотреть журналы вашей службы и посмотреть, сможете ли вы найти последнюю команду, успешно выполненную bash. Также рассмотрите возможность использования set -e в скрипте bash, чтобы он остановился при первой ошибке.

Несмотря на два «не по теме» «закрытых» голосования по этой теме, почему в systemd все по-другому работает, это тема для этого сайта Stack Exchange.

...