0

クライアントサーバーアプリケーションを作成しましたが、それをデプロイしたいと思います。

開発プロセス中にサーバーをターミナルで起動し、サーバーを停止したい場合は、「Ctrl-C」と入力するだけで済みました。

ここで、バックグラウンドで開始し、必要なときに次のように入力するだけで停止できるようにします。

/etc/init.d/my_service {stop|stop}

initscriptの実行方法は知っていますが、問題は実際にプロセスを停止する方法ですか?

私は最初、次のようなものでPIDを取得することを考えました。

ps aux | grep "my_service"

それから私は、まだPIDを使用して、より良いアイデアを見つけました。サービスを停止しようとしたときにファイルを取得するために、ファイルに保存します。

明らかに汚れすぎて安全ではないので、最終的にはソケットを使用して「停止」プロセスを有効にし、実際のプロセスにシャットダウンを指示することを考えました。

これが通常どのように行われるのか知りたいですか?というか、それを行うための最良の方法は何ですか?

init.d内のいくつかのファイルをチェックし、それらのいくつかはPIDファイルを使用していますが、特定のコマンド「start-stop-daemon」を使用しています。私には安全ではないように思われるこの方法について少し疑わしいです。

4

1 に答える 1

1

start-stop-daemonなどのユーティリティが利用可能な場合は、それを使用します。

start-stop-daemon柔軟で、実行中のサービスのプロセス ID を見つけるために 4 つの異なる方法を使用できます。この情報を使用して、(1) 開始時に同じサービスの 2 番目のコピーを開始することを回避し、(2) サービスを停止するときにどのプロセス ID を強制終了するかを決定します。

  • --pidfile処置: プロセスがファイル pid-file を作成したかどうかを確認してください。
  • --exec: この実行可能ファイルのインスタンスであるプロセスを確認してください
  • --name: process-name という名前のプロセスを確認してください
  • --user処置: ユーザー名またはuidで指定されたユーザーが所有するプロセスを確認してください。

一般的に使用するのに最適なものは、おそらく--pidfile. その他は主に、サービスが PID ファイルを作成しない場合に使用するためのものです。--execには、同じプログラムによって実装された 2 つの異なるサービス (つまり、同じサービスの 2 つのコピー) を区別できないという欠点があります。通常、この欠点は--name--name同じ名前を共有する関係のないプロセスと一致する可能性があります。--user他に使用されない専用のユーザー ID でサービスを実行する場合に便利です。なので、--pidfileできれば使ってください。

安全性を高めるために、オプションを組み合わせることができます。たとえば、--pidfileと を--exec一緒に使用できます。このようにして、PID ファイルを使用してプロセスを識別できますが、PID ファイルで見つかった PID が間違った実行可能ファイル (古い/無効な PID ファイル) を使用しているプロセスに属している場合は、信頼しないでください。

が提供するオプション名を使用しstart-stop-daemonてさまざまな可能性について説明しましたが、 を使用する必要はありませんstart-stop-daemon。この説明は、別のユーティリティを使用する場合や手動でマッチングを行う場合にも適用されます。

于 2013-01-14T16:17:16.477 に答える