sudo nohup nice <- в каком порядке?

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

sudo nohup nice foo.bash &

или же

nohup хороший sudo foo.bash &

и т.п.

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

6 ответов

Решение

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

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

Судо может не уважать милость. По крайней мере, это не на моей машине (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

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

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

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

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

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

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

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

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

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