21

所以我有一个脚本,我想以 root 身份运行,没有挂断并且很好。我应该按什么顺序输入命令?

sudo nohup nice foo.bash &

或者

nohup 不错的 sudo foo.bash &

等等

我怀疑这并不重要,但希望那些真正了解的人有一些见解。

4

6 回答 6

12

如果需要负面的友好,我会这样做:sudo nohup nice 命令,因为根据 `info coreutils' nohup 应该先于nice。如果我想要一个负的 nice 值,sudo 必须在前面,因为只有 root 能够使用负的 nice 值。

如果需要积极的友好,我会简单地做: nohup nice sudo 命令 这确保 nohup 和 nice 不以 root 权限运行。

于 2010-05-09T11:19:44.313 回答
11

sudo 可能不尊重善良。至少,它不在我的机器上(Ubuntu 9.04)。运行这个:

nice sudo nice
sudo nice nice

打印出 0 和 10。(请注意,没有命令的 'nice' 会打印出当前的 niceness。)

于 2009-12-15T20:22:37.300 回答
6
~ $ sudo nohup nice whoami
nohup: ignoring input and appending output to `nohup.out'
~ $ sudo cat nohup.out 
root

第一种和第二种方法之间的区别在于谁拥有 nohup.out 文件。sudo首先将使其归根用户所有,nohup然后 sudo 将使其归您的用户所有。

于 2008-12-08T18:32:27.540 回答
5

sudo 应该放在最后,这样 nohup 和 nice 就不会以 root 权限运行。

所以后者

于 2008-12-08T18:31:48.243 回答
3

不同意其他答案。我建议:

sudo nohup nice foo.sh

我观察到nohup sudo #fail - 即 nohup 并不总是转移到 sudo 的子子进程(这是针对 Ubuntu 上的某些 /etc/init.d 脚本委托给其他脚本的)。不知道为什么,当然令人惊讶,但确实如此,并且花了很长时间进行调试。

(我注意到其他人报告 niceness 没有通过,所以似乎最好把它放在最后......尽管如果对你的操作系统有疑问,请尽早放置 nice,因为 nice 不生效通常比 nohup 不生效更不是问题!)

请注意,sudo nohup使 nohup.out 归 root 所有,正如已经提到的,但这已通过以下方式修复:

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

于 2012-06-11T10:44:42.597 回答
1

我猜他们都做了一个 exec* 系统调用来将球传给下一个,所以,无论顺序如何,它都不会留下任何挂起的进程。

我会说 nohup 应该是最后一个,这样另外两个就不会破坏信号处理程序。(我确定 nice 不会使用信号,但 sudo 可以。)

然后,sudo 和 nice,这一切都取决于你想用 nice 改变调度优先级的方式。

  • 如果你想提高优先级(即,给 nice 一个负值),请先执行 sudo。
  • 如果您想降低优先级(给出一个正值),请在 sudo 之前执行,因为您不需要 root 权限。
于 2008-12-08T18:32:37.133 回答