systemctl работает при входе в консоль, но не работает при загрузке сервера

Я пытаюсь запустить скрипт run.sh для запуска панели администратора игрового сервера. Я создал сервис для его запуска при загрузке. Он отлично работает, когда я набираю sudo systemctl start servicename.serviceв консоли, но кажется, что он ломается при запуске при загрузке.

[Unit]
Description=Name Here
After=network.target

[Service]
Type=forking
ExecStart=/usr/bin/scriptname_start.sh
RemainAfterExit=yes
User=username
Group=usergroup
TimeoutStartSec=180

[Install]
WantedBy=multi-user.target

scriptname_start.sh content

#!/bin/bash
screen -dm bash -c 'bash /home/my/directory/run.sh +set serverProfile profilename +set Port 12345'

Из документов владельца скрипта

Требуется запуск изнутри FXServer в режиме монитора, чтобы выполнить что просто запустите run.sh без каких-либо аргументов +exec.

Ошибки панели (Панель работает без сервиса, так что не думаю, что проблема в панели)

Restarting server (server partial crash detected).
[04:46:17][FXRunner]  >> [1918] FXServer Exited.
[04:46:17][FXRunner]  >> [1918] FXServer Closed. (code null)
[04:46:19][FXRunner]  >> [2040] FXServer Started!

Что может быть не так?

Большое спасибо!

ПС. Я новичок, поэтому чем больше подробностей, тем лучше х))

journalctl --unit=fivemtxadmin.service -b

[root@server ~]# journalctl --unit=fivemtxadmin.service -b
-- Logs begin at Sun 2020-06-21 05:19:00 CEST, end at Sun 2020-06-21 05:19:23 CEST. --
Jun 21 03:19:01 server.domain.eu systemd[1]: Starting FiveM TxAdmin...
Jun 21 03:19:01 server.domain.eu systemd[1]: Started FiveM TxAdmin.

systemctl status Fivemtxadmin.service

[root@server ~]# systemctl status fivemtxadmin.service

● fivemtxadmin.service - FiveM TxAdmin

   Loaded: loaded (/usr/lib/systemd/system/fivemtxadmin.service; enabled; vendor preset: disabled)

   Active: active (running) since Sun 2020-06-21 03:19:01 CEST; 2h 2min ago

  Process: 822 ExecStart=/usr/bin/fivemtxadmin_start.sh (code=exited, status=0/SUCCESS)

 Main PID: 837 (screen)

   CGroup: /system.slice/fivemtxadmin.service

           ├─ 837 /usr/bin/SCREEN -dm /bin/bash -c bash /home/username/fivem/f...

           ├─ 843 /home/username/fivem/fx-server/alpine/opt/cfx-server/ld-musl...
           └─2077 /home/username/fivem/fx-server/alpine/opt/cfx-server/ld-musl...

Jun 21 03:19:01 server.domain.eu systemd[1]: Starting FiveM TxAdmin...

Jun 21 03:19:01 server.domain.eu systemd[1]: Started FiveM TxAdmin.
0
21.06.2020, 06:26
2 ответа

Ответ на конкретную проблему заключается в том, что мне просто нужно было использовать Type=idleи запустить службу после того, как все началось.

0
18.03.2021, 23:25

Из предоставленной вами информации неясно, в чем проблема, но вот несколько вещей, которые вы можете проверить:

  1. После внесения изменений в юнит-файлы вы должны запустить systemctl daemon-reload, чтобы запустить перезагрузку этих файлов.

  2. Запустите службу вручную, запустив sudo systemctl start servicename.serviceи убедитесь, что она запускается без проблем. Это тот случай, если вы не видите никакого вывода.

  3. Выполнить systemctl status servicename.service. Убедитесь, что он сообщает о работе службы. Также убедитесь, что служба «включена». Если это не так, запустите sudo systemctl enable servicename.service, чтобы сделать это.

  4. Перезагрузите компьютер и проверьте, работает ли служба снова.

Если служба не запускается, запустите journalctl -u servicename.service, чтобы просмотреть все сообщения журнала, напечатанные вашим сценарием.


Пара мыслей по поводу вашего скрипта:

  • Убедитесь, что пользователю, указанному в служебном файле, разрешено выполнять скрипт.

  • Ваш скрипт не указывает полный путь к командам, которые он вызывает. Этот путь обычно устанавливается для вашей оболочки при входе в систему. Переменная окружения PATHможет быть не установлена, когда служба запускается во время загрузки системы, поэтому рекомендуется использовать абсолютный путь в подобном сценарии:

    #!/bin/bash
    /usr/bin/screen -dm /bin/bash -c '/bin/bash /home/my/directory/run.sh +set serverProfile profilename +set Port 12345'
    
  • Проверьте, требует ли ваш сценарий, чтобы какое-либо устройство, кроме сети, было включено. Может быть, не хватает зависимости? Если добавление sleep 10в начало вашего скрипта «исправляет» вашу проблему, это может быть так.

  • Сообщения об ошибках, скорее всего, печатаются процессом, запущенным под управлением screen.Чтобы увидеть их, вам нужно прикрепить с помощьюscreen -r 837(PID в выводе, который вы предоставили выше ). При необходимости прокрутите с помощью клавиш курсора после нажатия Ctrl + Esc .

0
18.03.2021, 23:25

Теги

Похожие вопросы