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
ユニット ファイルが同じである場合、問題は他の場所にあるはずです。サービスが起動しようとしたときに生成されるログを確認してください。