Systemd PHP 起動スクリプト Centos 7

Systemd 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=最後に、行はおそらく必要ありません。 はsystemdサービスを停止します。 で検索してExecStop=man systemd.serviceその動作の詳細を確認するか、試してみてください。

サービスがお客様のサービスで機能する理由について: 2 つのサーバー間で何らかの環境の違いがあるはずです。systemdユニット ファイルが同じである場合、問題は他の場所にあるはずです。サービスが起動しようとしたときに生成されるログを確認してください。

関連情報