私は* 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(daemon
図killproc
)/etc/init.d/functions
とDebian()を調べましたstart-stop-daemon
。私はパイプをうまく扱わないことを学びました。これを開始することが何らかの方法で可能であっても、それを停止すると深刻な問題が発生します。だから私は小さなツールを書いた。pipexec
。このプログラムは一連のプログラムを起動しますが、1つのプログラムのように動作します。例:SIGTERM
aが送信されたら、pipexec
自分を殺す前にすべての子を殺します。また、pidファイルの処理もサポートしています。これにより、RHEL6daemon
とkillproc
。
プロセス間通信を処理するには、FIFO/名前付きパイプを使用する必要がありますか?それでは、これら2つのプロセスをバックグラウンドジョブとして作成する必要がありますか?これは安定していますか?
私もこれについて考えてみましたが、それは私にとってあまりにも複雑で、fifosの安定性と信頼性については良い経験がありません。 (おそらくそれは私の問題かもしれませんが、私はほとんど使用しません。;-))
RHEL6との統合に問題はありませんpipexec
。ただ実行されます。
ありがとう - アンドレアス