プロセスが独自にデーモン化できない場合は、initスクリプトでバックグラウンドジョブを作成するのが良い方法ですか?

プロセスが独自にデーモン化できない場合は、initスクリプトでバックグラウンドジョブを作成するのが良い方法ですか?

私は* nixに初めてアクセスし、100%実行する必要があるいくつかのプロセスを削除する必要がある状況にありました。バックグラウンドで使用してください&

これを行うには、init.dスクリプトで次の行を使用します(userとして実行user

su -c 'process arg1 arg2 -w - | process2 arg1 -r - &' user

(-wはSTDOUT、STDINを書き込み、-rはSTDOUT、STDINを読み込みます)

特に、これらのプロセスは外部の影響から十分に保護されていないため、一般的に許容できないことがわかっています。

「サービス」のバックグラウンドジョブを作成することは許可されますか?

プロセス間通信を処理するには、FIFO/名前付きパイプを使用する必要がありますか?

それでは、これら2つのプロセスをバックグラウンドジョブとして作成する必要がありますか?これは安定していますか?

詳細については、次を参照してください。このメーリングリストのトピック

ありがとう、

マット

答え1

特に、これらのプロセスは外部の影響から十分に保護されていないため、一般的に許容できないことがわかっています。

「サービス」のバックグラウンドジョブを作成することは許可されますか?

他の方法がない場合(つまり、サービスが独自にフォークされない場合)、おそらくそうです。 Debian にはこの状況のパラメータがstart-stop-daemonあります。--background

   -b, --background
          Typically used with programs that don't  detach  on  their  own.
          This option will force start-stop-daemon to fork before starting
          the  process,  and  force  it  into  the  background.   WARNING:
          start-stop-daemon  cannot  check  the exit status if the process
          fails to execute for any reason. This is a last resort,  and  is
          only  meant  for  programs  that either make no sense forking on
          their own, or where it's not feasible to add the code  for  them
          to do this themselves.

答え2

最初の質問への回答が完了したので、最後の2つの質問に集中します。

数日前、私は同様の問題に直面しました。/etc/init.dスクリプトのパイプを介していくつかのプロセスを開始する必要がありました。この問題を解決するために、RHEL6(daemonkillproc/etc/init.d/functionsとDebian()を調べましたstart-stop-daemon。私はパイプをうまく扱わないことを学びました。これを開始することが何らかの方法で可能であっても、それを停止すると深刻な問題が発生します。だから私は小さなツールを書いた。pipexec。このプログラムは一連のプログラムを起動しますが、1つのプログラムのように動作します。例:SIGTERMaが送信されたら、pipexec自分を殺す前にすべての子を殺します。また、pidファイルの処理もサポートしています。これにより、RHEL6daemonkillproc

プロセス間通信を処理するには、FIFO/名前付きパイプを使用する必要がありますか?それでは、これら2つのプロセスをバックグラウンドジョブとして作成する必要がありますか?これは安定していますか?

私もこれについて考えてみましたが、それは私にとってあまりにも複雑で、fifosの安定性と信頼性については良い経験がありません。 (おそらくそれは私の問題かもしれませんが、私はほとんど使用しません。;-))

RHEL6との統合に問題はありませんpipexec。ただ実行されます。

ありがとう - アンドレアス

関連情報