Я пытаюсь запустить скрипт 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.
Ответ на конкретную проблему заключается в том, что мне просто нужно было использовать Type=idle
и запустить службу после того, как все началось.
Из предоставленной вами информации неясно, в чем проблема, но вот несколько вещей, которые вы можете проверить:
После внесения изменений в юнит-файлы вы должны запустить systemctl daemon-reload
, чтобы запустить перезагрузку этих файлов.
Запустите службу вручную, запустив sudo systemctl start servicename.service
и убедитесь, что она запускается без проблем. Это тот случай, если вы не видите никакого вывода.
Выполнить systemctl status servicename.service
. Убедитесь, что он сообщает о работе службы. Также убедитесь, что служба «включена». Если это не так, запустите sudo systemctl enable servicename.service
, чтобы сделать это.
Перезагрузите компьютер и проверьте, работает ли служба снова.
Если служба не запускается, запустите 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 .