Служба systemd завершает работу немедленно (ошибка 203), но запускается нормально в отдельном режиме?

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

Служба systemd завершает работу немедленно (ошибка 203), но запускается нормально в отдельном режиме?

Я написал небольшое приложение (ELF-бинарник), которое слушает TCP/IP соединения, и оно работает нормально, когда я запускаю его из командной строки, но когда я использую systemd, возникает ошибка с кодом 203.

Вот мой файл службы:

[Unit]
Description=Демон службы удаленного ввода

[Service]
ExecStart=/home/sofakng/risd/risd

[Install]
WantedBy=multi-user.target

Вот статус от systemd, когда я пытаюсь его запустить:

× risd.service - Демон службы удаленного ввода
     Loaded: loaded (/etc/systemd/system/risd.service; disabled; preset: disabled)
    Drop-In: /usr/lib/systemd/system/service.d
             └─10-timeout-abort.conf
     Active: failed (Result: exit-code) since Sat 2024-09-21 22:06:38 EDT; 2min 24s ago
   Duration: 1ms
    Process: 18247 ExecStart=/home/sofakng/risd/risd (code=exited, status=203/EXEC)
   Main PID: 18247 (code=exited, status=203/EXEC)
        CPU: 532us

Sep 21 22:06:38 bazzite systemd[1]: Started risd.service - Демон службы удаленного ввода.
Sep 21 22:06:38 bazzite systemd[1]: risd.service: Основной процесс завершился, код=exited, статус=203/EXEC
Sep 21 22:06:38 bazzite systemd[1]: risd.service: Не удалось завершиться с результатом 'exit-code'.

Тем не менее, когда я запускаю бинарный файл из командной строки, он работает идеально. Я могу запустить его как я сам, так и под root, и в обоих случаях он работает нормально. Я проверил права на файл (a+x), и я не понимаю, почему это не работает.

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

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

Вот несколько возможных причин возникновения этой ошибки и пути их устранения:

  1. Проблемы с исполняемым файлом:

    • Убедитесь, что ваш исполняемый файл действительно является ELF-файлом и не поврежден. Вы можете проверить это с помощью команды file /home/sofakng/risd/risd.
    • Убедитесь, что у вашего исполняемого файла есть необходимые права доступа. Важно, чтобы файл был исполняемым (права a+x).
  2. Проблемы с зависимостями:

    • Проверьте, требуются ли вашему приложению какие-либо специфические библиотеки или зависимости, которые могут быть недоступны в окружении systemd. Попробуйте запустить ldd /home/sofakng/risd/risd, чтобы увидеть, не отсутствует ли какой-нибудь из требуемых файлов.
  3. Проблемы с окружением:

    • При запуске через systemd ваше приложение работает в другом окружении, чем в терминале. Проверьте, не ожидает ли ваше приложение, что некоторые переменные окружения будут установлены. Вы можете явно установить переменные окружения в секции [Service] вашего файла службы, добавив строки, например:
      Environment=VAR_NAME=value
  4. Контроль ошибок:

    • Чтобы детально проверить, что происходит при запуске службы, добавьте отладочную информацию. Измените файл службы, добавив StandardOutput и StandardError:
      [Service]
      ExecStart=/home/sofakng/risd/risd
      StandardOutput=journal
      StandardError=journal
    • После этого, проверьте журнал systemd с помощью команды journalctl -u risd.service для получения детальной информации о том, что происходит при запуске.
  5. Использование полного пути:

    • Убедитесь, что вы указываете полный путь к исполняемому файлу и что он корректен.
  6. Отладка с sudo:
    • Иногда службы systemd могут вести себя иначе, если они запускаются от имени пользователя с меньшими привилегиями. Попробуйте изменить пользователя, под которым выполняется служба, с помощью директивы User= в файле службы:
      [Service]
      User=ваше_имя_пользователя
      ExecStart=/home/sofakng/risd/risd

После применения вышеперечисленных рекомендаций попробуйте перезапустить вашу службу с помощью команд:

sudo systemctl daemon-reload
sudo systemctl restart risd.service

Затем проверьте статус службы снова. Надеюсь, что эти советы помогут вам устранить ошибку 203 и успешно запустить ваше приложение через systemd.

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

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