非ルートユーザーで「サービス」を実行するメカニズムはありますか?

非ルートユーザーで「サービス」を実行するメカニズムはありますか?

私(通常の非ルートユーザー)が制御できる、継続的に実行されるバックグラウンド プロセスを作成する方法はありますか?

必要なのは、プロセスを開始、停止、再起動することだけです。PID で監視し、終了時に SIGHUP または SIGINT を送信すれば問題ありません。複雑な bash スクリプトを使用してもかまいません。システム全体にわたるものである必要はありません。これは私の場合です。

また、ssh からログオフしたときに停止しないようにする必要があります。

RHEL 6.4 でこれを行う方法はありますか?

答え1

スクリーンまたはtmux

もちろん、screen や tmux などのターミナル マルチプレクサを利用することで、プロセスを開始し、継続的に実行することができます。プロセスは screen または tmux セッションで継続することができ、必要に応じてどちらか (screen または tmux) に接続したり切断したりできます。

背景

任意のプロセスを実行し、それをバックグラウンドで実行してから、 コマンドを使用して現在のターミナルから切断することができますdisown

$ disown -a

さらに、プロセスを起動するだけでバックグラウンドで実行する必要がない場合は、disownコマンドを使用できますnohup

$ nohup myexec &

シェルを終了しても、myexec実行は継続されます。

偽のプロセスを開始します。

$ sleep 12345 &
[1] 24339
$

見えるようにしてください:

$ pgrep -f "sleep 12345"
24339

しかし、それはまだ私たちの端末に接続されています:

$ jobs
[1]+  Running                 sleep 12345 &

では、やってみましょうdisown:

$ disown -a
$ jobs
$

まだ実行中であることがわかります:

$ pgrep -f "sleep 12345"
24339

では、ログアウトして再度ログインしてみましょう。まだそこにあるのがわかります:

$ pgrep -f "sleep 12345"
24339

標準的な方法を使用して、いつでもこのプロセスを終了できます。

$ pkill -HUP -f "sleep 12345"
$ pgrep -f "sleep 12345"
$ 

HUP上記は、パターン「sleep 12345」に一致するプロセス名にシグナルを送信します。 再確認すると、シグナルがなくなったことがわかります。

関連情報