そのため、ハングアップせずに適切にルートとして実行したいスクリプトがあります。コマンドはどのような順序で配置すればよいですか?
sudo nohup 素敵な foo.bash &
また
nohup すてきな sudo foo.bash &
等
関係ないと思いますが、詳しい方の意見をお願いします。
負のナイスネスが必要な場合は、次のようにします。「info coreutils」によると、nohup はナイスに先行する必要があるため、sudo nohup nice コマンドを実行します。負のナイス値が必要な場合は、root だけが負のナイス値を使用できるため、sudo を先に指定する必要があります。
nohup nice sudo コマンド これにより、nohup と nice が root 権限で実行されないようになります。
sudo は良さを尊重しないかもしれません。少なくとも、私のマシンにはありません (Ubuntu 9.04)。これを実行する:
nice sudo nice
sudo nice nice
0 と 10 を出力します (コマンドなしの 'nice' は、現在のナイス度を出力することに注意してください)。
~ $ sudo nohup nice whoami
nohup: ignoring input and appending output to `nohup.out'
~ $ sudo cat nohup.out
root
最初の方法と2番目の方法の違いは、nohup.outファイルの所有者です。sudo
最初にrootが所有するようにし、nohup
次にsudoがユーザーが所有するようにします。
nohupとniceがroot権限で実行されないように、sudoは最後に実行する必要があります。
後者
他の回答に同意しません。私はお勧め:
sudo nohup nice foo.sh
nohup sudo #failを観察しました。つまり、nohup が常に sudo されたサブサブプロセスに転送されるわけではありません (これは、さらに他のスクリプトに委任された Ubuntu の特定の /etc/init.d スクリプトに対するものでした)。理由はわかりませんが、確かに驚くべきことですが、実際にはそうであり、デバッグにはかなりの時間がかかりました。
(niceness が通過しないと他の人が報告しているので、最後に配置するのが最善のようです... ただし、OS に疑問がある場合は、nice を先に配置します。通常、nice が有効にならないことは、nohup が有効にならないことよりも問題が少ないからです!)
sudo nohupは、前述のように nohup.out を root が所有することに注意してください。ただし、これは次のように修正されます。
sudo nohup nice foo.sh >> /tmp/foo.stdout.log 2>> /tmp/foo.stderr.log
それらのすべてがexec*syscallを実行して、ボールを次のボールに渡すと思います。したがって、順序が何であれ、ハングしているプロセスが残ることはありません。
他の2つがシグナルハンドラーを壊さないように、nohupは最後にする必要があります。(niceはシグナルで再生されないと確信していますが、sudoでは再生されます。)
次に、sudoとniceは、スケジューリングの優先順位をniceで変更する方法によって異なります。