서비스를 만들려는 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
이것을 작동시키는 방법에 대한 아이디어가 있습니까?
답변1
두 서버의 모든 설정이 동일하면 소켓 권한을 확인하십시오.
답변2
시스템으로 자신의 프로세스를 악마화하는 것은 안티 패턴입니다.. 데몬화 옵션을 제거하는 것이 좋습니다.
그런 다음 데몬화하지 않으므로 PidFile=
옵션이 필요하지 않습니다.
Type=simple
또한 유형 simple
이 기본값이므로 를 포함할 필요가 없습니다 .
마지막으로, 서비스가 중단되므로 ExecStop=
회선 이 필요하지 않을 것입니다 . in을 systemd
검색하여 작동 방식에 대한 세부정보를 확인하거나 시도해 보세요.ExecStop=
man systemd.service
귀하의 서비스에서 서비스가 작동하는 이유에 대해: 두 서버 간에 환경적 차이가 있어야 합니다. systemd
유닛 파일이 동일 하다면 문제는 다른 곳에 있을 것입니다. 서비스를 시작하려고 할 때 생성되는 로그를 확인하세요.