【发布时间】:2010-09-25 21:49:11
【问题描述】:
所以我有一个脚本,我想以 root 身份运行,没有挂断并且很好。我应该按什么顺序输入命令?
sudo nohup nice foo.bash &
或
nohup nice sudo foo.bash &
等等
我怀疑这无关紧要,但希望真正了解的人提供一些见解。
【问题讨论】:
所以我有一个脚本,我想以 root 身份运行,没有挂断并且很好。我应该按什么顺序输入命令?
sudo nohup nice foo.bash &
或
nohup nice sudo foo.bash &
等等
我怀疑这无关紧要,但希望真正了解的人提供一些见解。
【问题讨论】:
如果需要消极的友善,我会这样做: sudo nohup 不错的命令 因为根据`info coreutils' nohup 应该在之前很好。如果我想要一个负的 nice 值,sudo 必须在前面,因为只有 root 可以使用负的 nice 值。
如果需要积极的友善,我会这样做: nohup 不错的 sudo 命令 这确保 nohup 和 nice 不会以 root 权限运行。
【讨论】:
sudo 可能不尊重友善。至少,它不在我的机器上(Ubuntu 9.04)。运行这个:
nice sudo nice
sudo nice nice
打印出 0 和 10。(请注意,没有命令的 'nice' 会打印出当前的 niceness。)
【讨论】:
sudo。这也是一种耻辱,因为细粒度的sudoers 会阻止允许的命令正常运行。
~ $ 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 的子子进程(这是针对某些 /etc/init .d 脚本在 Ubuntu 上委托给其他脚本)。不知道为什么,当然令人惊讶,但确实如此,并且花了很长时间进行调试。
(我注意到其他人报告 niceness 没有通过,所以似乎最好把它放在最后......尽管如果对你的操作系统有疑问,请早点把 nice 放好,因为 nice 不生效通常比 nohup 不采取更不是问题效果!)
请注意,sudo nohup 让 nohup.out 归 root 所有,正如已经提到的,但这已通过以下方式修复:
sudo nohup nice foo.sh >> /tmp/foo.stdout.log 2>> /tmp/foo.stderr.log
【讨论】:
我猜他们都做了一个 exec* 系统调用来将球传给下一个,所以,无论顺序如何,它都不会留下任何挂起的进程。
我会说 nohup 应该放在最后,这样其他两个就不会破坏信号处理程序。 (我确定 nice 不会使用信号,但 sudo 可以。)
然后,sudo 和 nice,这一切都取决于您希望使用 nice 更改调度优先级的方式。
【讨论】: