バックグラウンドプロセスを開始する正しい方法

バックグラウンドプロセスを開始する正しい方法

SSHセッションのリモートシステムでデフォルトのnode.jsサーバーを起動したいと思います。これはうまくいくようです:

nohup node server/server.js &  disown

たぶんnohupが必要ではないでしょうか? SIGTERMなどによって終了しないバックグラウンドプロセスを開始する「公式の」方法は何ですか?バックグラウンドプロセスを開始してからセッションを終了し、プロセスを実行し続けたいと思います。

ベストアンサー1

screenもちろんですtmux。ただし、接続を切断して再接続したい対話型セッション(通常はリモートシステム)のためのものです。あなたのアプリケーションは一種のサーバーのように見えるので、システムサービス(通常「悪魔「)その逆です。

以下では、使用しているシステムが次のとおりです。システム。次の場所にユニットファイルを作成するだけです/etc/systemd/system/foo.service

[Unit]
Description=My foo service
After=network.target

[Service]
ExecStart=/usr/bin/node /absolute/path/to/your/server.js
Restart=always
User=nobody

[Install]
WantedBy=multi-user.target

サービスがディスク上のファイルにアクセスする必要がある場合は、必要に応じてユーザーを変更してください。サービスファイルが準備されたら、次のコマンドを実行してsystemdに設定ファイルを再ロードし、サービスを実行するように要求します。

$ sudo systemctl daemon-reload
$ sudo systemctl start foo.service

システム起動時に自動的に起動しますか?ただアクティブにしてください:

$ sudo systemctl enable foo.service

問題が発生しましたか?次のコマンドを使用して問題を解決できます。

$ systemctl status foo.service
$ journalctl -u foo.service

サービスの終了/終了を防ぐためのあなたの要求について:どんなに言っても非常に難しいようです。ユーザーがアプリケーションを終了する権限を持っていなくても、システムにRAMが不足している可能性があり、RAMを最も頻繁に使用するサービスであるため、Out of Memory Killerがサービスを終了することを決定することもできます。私の提案は、Restart=always上記の例に含まれている内容を使用して、systemdにクラッシュ/終了時にサービスを再起動させることです。

おすすめ記事