sudo nohup nice <- в каком порядке? - PullRequest
19 голосов
/ 08 декабря 2008

Итак, у меня есть скрипт, который я хочу запустить от имени пользователя root, без зависания и без проблем. В каком порядке следует вводить команды?

sudo nohup nice foo.bash &

или

nohup nice sudo foo.bash &

и т.д.

Я подозреваю, что это не имеет значения, но хотел бы получить представление от тех, кто действительно знает.

Ответы [ 6 ]

10 голосов
/ 09 мая 2010

Если желательна отрицательная милость, я бы сделал: хорошая команда sudo nohup потому что согласно `info coreutils 'nohup должен предшествовать приятно. Если я хочу получить отрицательное значение nice, sudo должно быть раньше, поскольку только root может использовать отрицательные значения nice.

Если желательна положительная милость, я бы просто сделал: nohup хорошая команда sudo Это гарантирует, что nohup и nice не запускаются с правами root.

10 голосов
/ 15 декабря 2009

sudo может не уважать милость. По крайней мере, это не на моей машине (Ubuntu 9.04). Запуск этого:

nice sudo nice
sudo nice nice

выводит 0 и 10. (Обратите внимание, что «nice» без команды выводит текущее значение.)

6 голосов
/ 08 декабря 2008
~ $ sudo nohup nice whoami
nohup: ignoring input and appending output to `nohup.out'
~ $ sudo cat nohup.out 
root

Разница между первым и вторым способом заключается в том, кто владеет файлом nohup.out. sudo сначала сделает его владельцем root, nohup перед тем, как sudo сделает его вашим пользователем.

6 голосов
/ 08 декабря 2008

sudo должно быть последним, чтобы nohup и nice не работали с привилегиями root.

так что последний

3 голосов
/ 11 июня 2012

Не согласен с другими ответами. Я рекомендую:

sudo nohup nice foo.sh

Я наблюдал nohup sudo # fail - т.е. nohup не всегда переносится в подпроцессы sudo'd (это было для некоторых /etc/init.d скрипты на Ubuntu, которые делегированы еще другим скриптам). Не уверен, почему, конечно, удивительно, но это имело место, и для отладки потребовалось немало времени.

(Я отмечаю, что другие сообщают, что прощение не проходило, поэтому, кажется, лучше поставить его в последнюю очередь ... хотя, если вы сомневаетесь в вашей ОС, поставьте «хороший» раньше, потому что «хороший» отказ от эффекта обычно является меньшей проблемой, чем отсутствие «ничего» эффект!)

Обратите внимание, что sudo nohup оставляет nohup.out в собственности root, также как уже упоминалось, но это исправлено с помощью:

sudo nohup nice foo.sh >> /tmp/foo.stdout.log 2>> /tmp/foo.stderr.log

1 голос
/ 08 декабря 2008

Полагаю, все они выполняют системный вызов exec *, чтобы передать мяч следующему, поэтому, независимо от порядка, он не оставит никаких зависаний.

Я бы сказал, что nohup должен быть последним, чтобы два других не засоряли обработчик сигнала. (Я уверен, что приятно не играет с сигналами, но sudo делает.)

Тогда, sudo и nice, все зависит от того, каким образом вы хотите изменить приоритет планирования с помощью nice.

  • Если вы хотите повысить приоритет (то есть присвоить nice отрицательное значение), сделайте sudo раньше.
  • Если вы хотите уменьшить приоритет (дать положительное значение nice), сделайте это до sudo, так как вам не нужны привилегии root.
...