Служба Systemd не запускается при перезагрузке

Вопрос или проблема

У меня есть следующая служба systemd под названием startupsh.service, размещенная в /etc/systemd/system/ на моем raspberry pi с установленным raspbian.

[Unit]
Description=Служба для запуска телеграм-бота
After=graphical.target
Requires=network.target

[Service]
Type=forking
RemainAfterExit=yes
User=pi
ExecStart=/usr/bin/finder.sh &

[Install]
WantedBy=multi-user.target

Я также включил службу с помощью

sudo systemctl daemon-reload
sudo systemctl enable startupsh.service

И sudo systemctl is-enabled startupsh.service показывает, что служба действительно включена. Более того, если я запускаю sudo systemctl start startupsh.service, все работает, как и ожидалось. Однако, если pi перезагрузить, служба не выполняется, и sudo systemctl status startupsh.service показывает, что служба неактивна (мертва).

Что не так при запуске? Как я могу это исправить?

Редактирование: Скрипт finder.sh выглядит следующим образом

#!/usr/bin/env bash
echo "Запуск бота..."
source /home/pi/Desktop/Airdropfinder/airdropfinderEnv/bin/activate
python /home/pi/Desktop/Airdropfinder/airdropfinder/src/telegrambot.py

Добавьте Restart=on-failure в ваш файл единицы systemd.

systemd.service

Restart=

Если установлено на on-failure, служба будет перезапущена, когда процесс завершится с ненулевым кодом выхода.

Ответ или решение

Проблема: Сервис systemd не запускается при перезагрузке

В вашем случае, несмотря на то что сервис startupsh.service корректно запускается вручную, он не активируется автоматически при перезагрузке Raspberry Pi. Чтобы решить эту проблему, необходимо понять несколько аспектов работы systemd и конфигурации вашего сервиса.

Возможные причины проблемы

  1. Error Handling (Обработка ошибок): Ваша конфигурация сервиса не предусматривает перезапуск в случае сбоя. Это значит, что если при старте возникнет ошибка, сервис не будет автоматически перезапущен. Добавление строки Restart=on-failure в секцию [Service] вашего unit-файла поможет решить эту проблему.

  2. Проблемы с зависимостями: Вы указали, что ваш сервис требует network.target, но этот таргет может быть не активен на момент запуска вашего сервиса. Убедитесь, что все необходимые ресурсы доступны. Можно попробовать добавить Wants=network-online.target и After=network-online.target, чтобы гарантировать, что сервис будет запускаться только после полной инициализации сети.

  3. Ошибки в скрипте finder.sh: Убедитесь, что ваш скрипт выполняется корректно. Добавление отладочной информации в скрипт, например, ведение логирования в файл, может помочь вам идентифицировать, происходит ли сбой на этапе запуска.

  4. Отсутствие прав доступа: Убедитесь, что пользователь pi имеет соответствующие права для выполнения всех команд, указанных в вашем скрипте finder.sh. Также проверьте права на выполнение самого скрипта finder.sh.

Как исправить проблему

  1. Редактируйте ваш unit-файл /etc/systemd/system/startupsh.service, добавьте следующие строки:

    [Service]
    Type=forking
    RemainAfterExit=yes
    User=pi
    ExecStart=/usr/bin/finder.sh &
    Restart=on-failure
  2. Обновите конфигурацию systemd:

    sudo systemctl daemon-reload
  3. Убедитесь, что включены зависимости для сети, добавьте к секции [Unit] следующее:

    [Unit]
    Description=Service to start telegram bot
    After=graphical.target network-online.target
    Wants=network-online.target
  4. Выполните команды для включения вашего сервиса:

    sudo systemctl enable startupsh.service
  5. Перезагрузите систему и проверьте статус сервиса:

    sudo reboot
    sudo systemctl status startupsh.service
  6. Проверьте логи вашего скрипта и состояние сервиса. Если сервис не запустился, используйте команду journalctl -u startupsh.service для просмотра логов.

Следуя этим рекомендациям, вы сможете устранить неполадки, связанные с автоматическим запуском вашего systemd сервиса при перезагрузке системы. Не забывайте, что правильная диагностика проблем и обработка ошибок являются ключевыми факторами для успешного функционирования ваших скриптов и сервисов.

Оцените материал
Добавить комментарий

Капча загружается...