시스템화된 PHP 시작 스크립트 Centos 7

시스템화된 PHP 시작 스크립트 Centos 7

서비스를 만들려는 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유닛 파일이 동일 하다면 문제는 다른 곳에 있을 것입니다. 서비스를 시작하려고 할 때 생성되는 로그를 확인하세요.

관련 정보