sudoを使用してデーモンを分離しますか?

sudoを使用してデーモンを分離しますか?

sudo次の行のいずれかを実行した後も引き続き実行されることがわかりました。sudoこれ以上実行しないようにデーモンを完全に分離する方法はありますか?

sudo -u user daemon &
sudo -u user -b daemon

答え1

次のように一度に背景として設定できます。

sudo -u user sh -c "daemon & disown %1"

ビューにはRunningがps表示されます。それに関連するものは何もありません。daemonusersudo

答え2

sudo要求されたプログラムを実行した後、実行状態は維持されなくなります。実際には、exec()システムコールを使用して、プログラムが同じPIDを持つことを指定したプログラムに置き換えますsudo。次のコマンドを実行してこれを確認できます。

sudo -u user -b sleep 60
ps aux | grep sudo
ps aux | grep sleep

sleepはまだ実行中ですが、sudoは実行されていないことがわかります。

&演算子を使用して sudo をバックグラウンドに配置するようにシェルに要求すると、sudo はパスワードの入力を求める必要がある場合、バックグラウンドでブロックして無期限に待機します。パスワードの入力を求められない場合、指定したプログラムは実行され、sudo再実行されません。 -bスイッチはブロック可能性のために好ましい方法であるsudoため、必要に応じてパスワードの入力を求められ、要求されたプログラムを実行するためにバックグラウンドに分岐されます。

答え3

申し訳ありません。これは実際には答えではなく、追加のコメントに近いです。

psusiの応答にもかかわらず、いくつかのバージョンは常にそうですsudo(指定されていない場合はfork()子プロセスを待ちます)。-b

usingの問題は、デーモンのPIDが含まれていないこと-bです。 usingの問題は、argsをtoに渡すことがかなり歪んでいることです。 Twistはまずsudoを使用する主な理由です。$!daemonizesudo sh -c 'run_my_daemon arg1 arg2 arg3... & save_pid $!'run_my_daemon

最初からルートでない場合は、パスワードを待つことを心配するだけです。特に、すでにsudo -u $run_as_uid prog "${args[@]}"rootとして実行されているスクリプト内でパスワードを使用することを検討してください。

答え4

プログラムがあればdaemonize使用してくださいsudo daemonize PATH_TO_DAEMON

関連情報