2011-05-29 16 views
9

Tengo un script grande llamado mandacalc que siempre quiero ejecutar con el comando nohup. Si lo llamo desde la línea de comando como:¿Cómo incluir nohup dentro de un script bash?

nohup mandacalc & 

todo funciona rápidamente. Pero, si trato de incluir nohup dentro de mi comando, entonces no necesito escribirlo cada vez que lo ejecuto, aparece un mensaje de error.

Hasta ahora he probado todas estas opciones:

nohup (
command1 
.... 
commandn 
exit 0 
) 

y también:

nohup bash -c " 
command1 
.... 
commandn 
exit 0 
" # and also with single quotes. 

Hasta ahora sólo recibe mensajes de error se quejan de la ejecución del comando nohup, o sobre otras citas usado dentro del script

aplausos.

+0

se necesitan para dar la ruta completa a nohup posiblemente? 'which nohup' – wilbbe01

Respuesta

1

¿Por qué no haces una secuencia de comandos que contiene nohup ./original_script?

16

trate de poner esto al comienzo de su script:

#!/bin/bash 

case "$1" in 
    -d|--daemon) 
     $0 < /dev/null &> /dev/null & disown 
     exit 0 
     ;; 
    *) 
     ;; 
esac 

# do stuff here 

Si ahora inicia el guión con --daemon como argumento, se reiniciará separado de su shell actual.

Aún puede ejecutar su script "en primer plano" al iniciarlo sin esta opción.

+8

Bash es tan raro –

3

crear un alias del mismo nombre en su fiesta (o concha preferido) archivo de inicio:

alias mandacalc = "nohup mandacalc &"

1

sólo hay que poner en el trap '' HUP beggining de su script.

Además, si se crea el proceso hijo someCommand& tendrá que cambiarlos a nohup someCommand& funcione correctamente ... He estado investigando esto durante mucho tiempo y sólo la combinación de estos dos (la trampa y nohup) funciona en mi script específico donde xterm cierra demasiado rápido.

3

Hay una buena respuesta aquí: http://compgroups.net/comp.unix.shell/can-a-script-nohup-itself/498135

#!/bin/bash 

### make sure that the script is called with `nohup nice ...` 
if [ "$1" != "calling_myself" ] 
then 
    # this script has *not* been called recursively by itself 
    datestamp=$(date +%F | tr -d -) 
    nohup_out=nohup-$datestamp.out 
    nohup nice "$0" "calling_myself" "[email protected]" > $nohup_out & 
    sleep 1 
    tail -f $nohup_out 
    exit 
else 
    # this script has been called recursively by itself 
    shift # remove the termination condition flag in $1 
fi 

### the rest of the script goes here 
. . . . . 
Cuestiones relacionadas