Node.js アプリを実行している systemd サービス ファイルがあります。サービスは正常に動作しているように見えますが、サービスを停止すると、サービスの使用systemctl stop train
が失敗した状態になります。
[root@localhost portaj]# systemctl stop train
[root@localhost portaj]# systemctl status train
train.service - Train Service
Loaded: loaded (/etc/systemd/system/train.service; enabled)
Active: failed (Result: exit-code) since Mon 2014-08-04 04:40:17 UTC; 1s ago
Process: 25706 ExecStart=/opt/node/bin/node /opt/train/src/server/start.js (code=exited, status=143)
Main PID: 25706 (code=exited, status=143)
Aug 04 04:33:39 localhost.localdomain train[25706]: Train Server listening on port 3000
Aug 04 04:40:17 localhost.localdomain systemd[1]: Stopping Train Service...
Aug 04 04:40:17 localhost.localdomain systemd[1]: train.service: main process exited, code=exit.../a
Aug 04 04:40:17 localhost.localdomain systemd[1]: Stopped Train Service.
Aug 04 04:40:17 localhost.localdomain systemd[1]: Unit train.service entered failed state.
私のサービスファイルは次のようになります。
[Unit]
Description=Train Service
After=network.target
[Service]
Environment=PORT=4000
Environment=NODE_ENV=development
ExecStart=/opt/node/bin/node /opt/train/src/server/start.js
Restart=on-failure
SyslogIdentifier=train
[Install]
WantedBy=network.target
Node.js アプリが、systemd が失敗と見なすステータス コードを返していると思われます。可能であれば、Node.js アプリが別のステータス コードを返すようにする必要があるかどうかはわかりません。または、systemd サービス ファイルを何らかの方法で変更する必要がある場合。
それが役立つ場合は、デプロイ スクリプトがここにあります: https://github.com/JonathanPorta/ansible-train
実際の Node.js アプリはこちら: https://github.com/JonathanPorta/train
助けてくれてありがとう!