У меня есть сценарий PHP, для которого я пытаюсь создать службу. Я создал службу, но не могу ее запустить. Странно то, что точно такой же сервисный UNIT работает на другом моем сервере с такой же настройкой. Сценарий PHP настроен на запуск с помощью ключа -d. Сама команда работает нормально, но не через systemd.
Вот что я получаю
● serverio.service - Socket Server Service
Loaded: loaded (/etc/systemd/system/multi-user.target.wants/serverio.service)
Active: inactive (dead) since Wed 2017-01-18 23:41:49 UTC; 2s ago
Process: 22921 ExecStop=/usr/bin/php /opt/sockets/server.php stop (code=exited, status=0/SUCCESS)
Process: 22917 ExecStart=/usr/bin/php /opt/sockets/server.php start -d (code=exited, status=0/SUCCESS)
Main PID: 22917 (code=exited, status=0/SUCCESS)
Jan 18 23:41:49 hostname systemd[1]: Started SocketIO Server Service.
Jan 18 23:41:49 hostname systemd[1]: Starting SocketIO Server Service...
Вот мой служебный файл.
[Unit]
Description=SocketIO Server Service
[Service]
Type=simple
PIDFile=/opt/sockets/phpio.pid
ExecStart=/usr/bin/php /opt/sockets/server.php start -d
ExecStop=/usr/bin/php /opt/sockets/server.php stop
[Install]
WantedBy=multi-user.target
Есть идеи, как заставить это работать?
Если все настройки одинаковы на обоих серверах, посмотрите разрешение сокета
Демонизация собственного процесса с помощью системы - это антипаттерн. Рекомендуется удалить параметр демонизации.
Тогда, поскольку вы не демонизируете, вам не понадобится PidFile=
вариант.
Кроме того, вам не нужно включать Type=simple
, поскольку simple
Тип по умолчанию.
Наконец, вам, скорее всего, не понадобится ExecStop=
линия, как systemd
остановит для вас услуги. Ищи ExecStop=
в man systemd.service
чтобы узнать подробности о том, как это ведет себя, или попробовать.
Относительно того, почему служба работает с вашей службой: между двумя серверами должна быть какая-то разница в среде. Если systemd
unit файлы такие же, проблема должна быть в другом месте. Проверьте журналы, которые ваша служба создает при попытке запуска.