Назад | Перейти на главную страницу

Проблема с запуском двоичного файла сервера Golang как службы с Systemd

Я пытаюсь запустить двоичный файл сервера Golang как службу с Systemd на Centos 8, но я получаю сообщение об ошибке.

Это мой сценарий /etc/systemd/system/myserverapp.service

[Unit]
Description=MyServerApp

[Service]
Type=simple
ExecStart=/var/mybin/myserverapp

[Install]
WantedBy=multi-user.target

Вот что я набираю:

sudo systemctl enable myserverapp
sudo systemctl start myserverapp

но он не запускается, и если я наберу:

sudo systemctl status myserverapp

вот что я получаю:

● myserverapp.service - MyServerApp
   Loaded: loaded (/etc/systemd/system/myserverapp.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Mon 2020-04-20 19:36:36 UTC; 2s ago
  Process: 11228 ExecStart=/var/mybin/myserverapp (code=exited, status=203/EXEC)
 Main PID: 11228 (code=exited, status=203/EXEC)

Apr 20 19:36:36 myserver systemd[1]: myserverapp.service: Main process exited, code=exited, status=203/EXEC
Apr 20 19:36:36 myserver systemd[1]: myserverapp.service: Failed with result 'exit-code'.
Apr 20 19:36:36 myserver systemd[1]: myserverapp.service: Service RestartSec=100ms expired, scheduling restart.
Apr 20 19:36:36 myserver systemd[1]: myserverapp.service: Scheduled restart job, restart counter is at 5.
Apr 20 19:36:36 myserver systemd[1]: Stopped MyServerApp.
Apr 20 19:36:36 myserver systemd[1]: myserverapp.service: Start request repeated too quickly.
Apr 20 19:36:36 myserver systemd[1]: myserverapp.service: Failed with result 'exit-code'.
Apr 20 19:36:36 myserver systemd[1]: Failed to start MyServerApp.

обратите внимание, что если я бегу: sudo /var/mybin/myserverapp из оболочки двоичный файл сервера работает правильно

Я нашел проблему!

Это произошло из-за Политика SELinux, который отрицал Systemd для запуска моего серверного приложения как службы, так как оно было в нестандартном каталоге bin /var/mybin/.

вы можете проверить, что SELinux отклонил выполнение, выполнив команду:

sudo ausearch -m avc -ts today

Есть 2 возможных решения:

1) переместите двоичный файл в стандартный каталог bin, например /usr/local/bin

2) добавить bin_t SELinux для /var/mybin/myserverapp файл, чтобы Systemd могла запускать его как службу.

Чтобы применить решение 2), вам просто нужно выполнить команду:

sudo semanage fcontext -a -t bin_t /var/mybin/myserverapp

если вы хотите перечислить все текущие правила SELinux, просто введите:

sudo semanage fcontext -l

в случае semanage не установлен в вашей системе, вы можете просто установить его с помощью этой команды:

sudo dnf install policycoreutils-python-utils