2008-12-08 15 views
18

Así que tengo un script que quiero ejecutar como root, sin hangup y muy bien. ¿En qué orden debo poner los comandos?sudo nohup nice <- ¿en qué orden?

sudo nohup agradable foo.bash &

o

nohup agradable foo.bash sudo &

etc.

sospecho que no importa, pero le gustaría una idea de aquellos que realmente saber.

Respuesta

10

Si se desea desertar negativo, me gustaría hacer: sudo nohup agradable comando porque según `info coreutils 'nohup debería precedido nice. Si quiero un buen valor negativo, sudo debe aparecer antes, ya que solo root puede usar valores agradables negativos.

Si se desea desertar positivo, me gustaría hacer simplemente: nohup buen comando sudo Esto asegura que nohup y agradable no se ejecutan con privilegios de root.

6

el sudo debe ir en último lugar para que nohup y nice no se ejecuten con privilegios de administrador.

por lo que la última

6
~ $ sudo nohup nice whoami 
nohup: ignoring input and appending output to `nohup.out' 
~ $ sudo cat nohup.out 
root 

La diferencia entre la primera y segunda manera que has hecho es el que posee el archivo nohup.out. sudo primero lo hará propiedad de root, nohup antes de que sudo lo haga propiedad de su usuario.

1

Supongo que todos ellos hacen un siscall exec * para pasar el balón al siguiente, así que, sea cual sea el orden, no dejará ningún proceso de colgado.

Diría que nohup debería ser el último para que los otros dos no bloqueen el manejador de señal. (Estoy seguro de que no funciona bien con las señales, pero sudo sí lo hace.)

Entonces, sudo y agradable, todo depende de qué manera desee alterar la prioridad de programación con nice.

  • Si desea aumentar la prioridad (es decir, dar un valor negativo a nice) haga sudo antes.
  • Si desea disminuir la prioridad (dé un buen valor positivo) hágalo antes de sudo, ya que no necesita privilegios de administrador.
+0

Gracias por su respuesta. ¿Podrías explicarme sudo jugando con las señales? (o simplemente proporcione un enlace :) ¡gracias! –

9

sudo no puede respetar la bondad. Al menos, no funciona en mi máquina (Ubuntu 9.04). La ejecución de este:

nice sudo nice 
sudo nice nice 

imprime 0 y 10. (. Tenga en cuenta que 'bien' sin comando imprime fuera de la amabilidad actual)

+0

Cualquier otra respuesta se equivoca. Debian Squeeze es lo mismo: la amabilidad no se pega a través de 'sudo'. Es una pena, también, porque un 'sudoers' de grano fino bloqueará un comando permitido ejecutarse muy bien. –

3

No estoy de acuerdo con otras respuestas.Recomiendo:

sudo nohup nice foo.sh

he observado nohup sudo#fail - es decir nohup no siempre se transfiere a sudo'd sub-sub-procesos (esto fue para cierta/etc/init. d scripts en Ubuntu que delegaron a otros scripts). No estoy seguro de por qué, sin duda sorprendente, pero fue el caso y se tomó un buen tiempo para depurar.

(observo que otros informan que la bondad no se traspasa, por lo que parece mejor dejarla en último lugar ... aunque si tiene dudas sobre su sistema operativo, háganlo antes, porque lo bueno no es menos problemático que nohup no teniendo efecto)

Tenga en cuenta que sudo nohup hojas nohup.out propiedad de root, también como se ha mencionado, pero que está fijada con un:

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