rc5.d に保存されたスクリプト ファイルを介してバイナリ (C++ で記述) を実行することにより、サービス デーモンを開始しました。
しかし、デーモン プロセスの pid を取得して /var/run/.pid の pid ファイルに保存する方法がわかりません。終了にpidを使用できるように。これどうやってするの?
initスクリプトの引数で使用start-stop-daemon(8)
してみてください。--pidfile
プログラムにPIDを指定された場所(通常は構成ファイルで決定されます)に書き込んでもらいます。
注意しなければならないのは、たとえば、再起動後もロックファイルが持続した場合の古いPIDファイルです。そのロジックは、initスクリプト自体に実装するのが最適であるため、--exec
オプションを使用できますstart-stop-daemon
。
たとえば、がサービスであり、サービスではない場合/var/run/foo.pid
、1234
ロック/proc/1234/exe
ファイルは古くなっているため、静かに削除して、サービスを正常に開始できるようにする必要があります。
アプリケーションに関する限り、ロックファイルの場所が構成可能であることを確認してください。また、initスクリプトにロックファイルを配置する場所を指示する手段がいくつかあります。
例:(サンプル:/ etc / default / foo):
PIDFILE=/var/run/foo.pid
OTHEROPTION=foo
次に、/ etc / init.d / fooにあります:
[ -f /etc/default/foo ] && . /etc/default/foo
繰り返しになりますが、一貫してファイルに書き込む以外に、このロジックはすべてアプリケーションの外部で処理する必要があります。
プログラムが開いているポートがわかっている場合は、fuser
コマンドを使用してpidを判別します。
あなたは複数の方法について行くことができます: