¿Cómo puedo utilizar el nohup comando sin llegar nohup.a cabo?

Tengo un problema con el nohup comando.

Cuando ejecuto mi trabajo, tengo un montón de datos. La salida de nohup.llega a ser demasiado grande y mi proceso se ralentiza. ¿Cómo puedo ejecutar este comando sin llegar nohup.a cabo?

InformationsquelleAutor Ofer | 2012-05-02

8 Kommentare

  1. 560

    nohup sólo escribe para nohup.out si el resultado es contrario a la terminal. Si usted redirigir la salida del comando en alguna otra parte – incluyendo /dev/null – que es donde se va en su lugar.

     nohup command >/dev/null 2>&1   # doesn't create nohup.out
    

    Si usted está usando nohup, que probablemente significa que usted desea ejecutar el comando en el fondo, por poner otro & en el final de todo el asunto:

     nohup command >/dev/null 2>&1 & # runs in background, still doesn't create nohup.out
    

    En Linux, ejecutando un trabajo con nohup cierra automáticamente la entrada así. En otros sistemas, en particular, BSD y mac os, que no es el caso, por lo que cuando se ejecuta en el fondo, puede que desee cerrar la entrada manualmente. Mientras que el cierre de la entrada no tiene ningún efecto sobre la creación o no de nohup.out, evita otro problema: si un proceso en segundo plano intenta leer de la entrada estándar, se hará una pausa, esperando a que trajeran de vuelta al primer plano y escriba algo. Por lo que la seguridad extra de la versión se parece a esto:

    nohup command </dev/null >/dev/null 2>&1 & # completely detached from terminal 
    

    Nota, sin embargo, que ello no impide que el comando de acceso a la terminal directamente, ni sacarlo de su caparazón del proceso de grupo. Si usted desea hacer el último, y que se están ejecutando bash, ksh, o zsh, puede hacerlo mediante la ejecución de disown con ningún argumento como el siguiente comando. Lo que va a significar el proceso de fondo ya no está asociado con un shell «trabajo» y no tendrá ninguna de las señales que le ha sido enviada desde el shell. (Nota de la distinción: una disowned proceso no recibe las señales que le ha sido enviada automáticamente por sus padres shell – pero sin nohup, todavía recibirá un HUP señal enviada a través de otros medios, tales como un manual de kill comando. Un nohup‘ed proceso omite cualquier y todos los HUP señales, no importa la forma en que se envía.)

    Explicación:

    En Unixy sistemas, cada fuente de entrada o el destino de salida tiene un número asociado que llamó un «descriptor de archivo», o «fd», para abreviar. Cada programa en ejecución («proceso») tiene su propio conjunto de estos, y cuando un nuevo proceso que se inicia tiene ya tres de ellos abierto: «la entrada estándar», que es fd 0, está abierto para el proceso de leer, mientras que «la salida estándar» (fd 1) y «error estándar» (fd 2) están abiertas para escribir. Si usted acaba de ejecutar un comando en una ventana de terminal, de forma predeterminada, cualquier cosa que escriba va a su entrada estándar, mientras tanto su salida estándar y el error estándar se envían a la ventana.

    Pero usted puede pedir a la shell para cambiar el lugar de alguno o todos los descriptores de archivo de punto antes de lanzar el comando; eso es lo que la redirección (<, <<, >, >>) y el tubo (|) a los operadores a hacer.

    La tubería es el más simple de estos… command1 | command2 organiza la salida estándar de command1 para alimentar directamente la entrada estándar de command2. Esta es una aplicación muy útil la disposición que ha llevado a un particular patrón de diseño en herramientas de UNIX (y explica la existencia de error estándar, que permite que un programa para enviar mensajes al usuario, incluso a pesar de que su salida está pasando en el próximo programa en la tubería). Pero sólo se puede tubería de salida estándar a la entrada estándar; no se puede enviar a cualquier otro descriptores de archivo a un tubo sin algunos malabarismos.

    La redirección de los operadores son más amigables que permiten especificar qué archivo descriptor de redirigir. Así 0<infile lee de la entrada estándar desde el archivo llamado infile, mientras que 2>>logfile anexa error estándar para el final del archivo llamado logfile. Si no especifica un número, a continuación, redirección de entrada por defecto fd 0 (< es el mismo que 0<), mientras que la redirección de la salida por defecto fd 1 (> es el mismo que 1>).

    También, se pueden combinar los descriptores de archivo juntos: 2>&1 significa «enviar error estándar donde la salida estándar está pasando». Eso significa que usted obtiene de una sola corriente de salida que incluye tanto la salida estándar y el error estándar mezclar con ninguna manera de separarlos, pero también significa que usted puede incluir el error estándar en una tubería.

    Por lo que la secuencia de >/dev/null 2>&1 significa «enviar la salida estándar a /dev/null» (que es un dispositivo especial que solo tira a la basura todo lo que se escribe en él) «y, a continuación, enviar el error estándar a cualquier lugar de salida estándar está pasando» (que sólo nos aseguramos fue /dev/null). Básicamente, «tirar lo que este comando se escribe en el archivo descriptor».

    Cuando nohup detecta que ni su error estándar ni de salida está conectada a un terminal, no se molestan en crear nohup.out, pero se supone que la salida ya está redirigido donde el usuario quiere que vaya.

    La /dev/null dispositivo de obras para la entrada, demasiado; si ejecuta un comando con </dev/null, entonces, cualquier intento por que el comando para leer de la entrada estándar al instante encuentro de fin de archivo. Tenga en cuenta que la combinación de sintaxis no tienen el mismo efecto aquí; sólo funciona a punto de un descriptor de archivo a otro, uno que se abre en la misma dirección (entrada o salida). El shell permite hacer >/dev/null <&1, pero hasta que los vientos de la creación de un proceso con una entrada descriptor de archivo abierto en un flujo de salida, así que en lugar de golpear a fin de archivo, cualquier intento de lectura desencadenará una fatal «invalid file descriptor de error».

    • ¿Puede por favor explicar la 2 y la 1 ?
    • ¿Por qué algunas respuestas dan > /dev/null y algunos dan < /dev/null ?
    • He añadido una explicación detallada; espero que ayude.
    • Con respecto a nohup, » si el proceso más tarde intenta leer de la entrada estándar, se hará una pausa, esperando a que trajeran de vuelta al primer plano y escriba algo.» parece incorrecta. En su lugar, nohup cierra la entrada estándar (el programa no será capaz de leer cualquier entrada, incluso si se ejecuta en primer plano. no se detuvo, pero recibirá un código de error o EF).
    • que respuesta es la correcta para Linux, pero no para BSD o mac OS X, en la que nohup no no cerca de la entrada estándar automáticamente. Tenga en cuenta que nohup no es un shell builtin pero un binario de utilidad.
    • nohup es parte de coreutils. ¿Te refieres a la aplicación de nohup es diferente para linux y BSD o mac OS X?
    • Sí. El nombre de «coreutils» se refiere a un paquete de GNU. Pero BSD, mac OS X, SmartOS/Illumos, y muchos comerciales de Unix – básicamente, aquellos que han sido de alrededor de más de GNU – no-GNU core utilities. awk es diferente, sed es diferente, nohup es diferente…
    • ¿Por qué se escribe «extra fuerte» por </dev/null? Ver también 0>/dev/null unix.stackexchange.com/a/266247
    • Acabo de decir «el más que seguro que se desprenden de la terminal». Como para 0>/dev/null, generalmente tienen el mismo efecto como >/dev/null <&1, que he mencionado.
    • «..completamente independiente de la terminal»: corro soffice -invisible de mi script usando el mencionado sintaxis y entonces el sueño de 10. Si me presione Ctrl-C durante ese período de soffice se detiene. La sustitución de nohup con setsid hizo el trabajo.
    • Es sólo separado de la terminal de si el programa no sale de su camino para unirse a la terminal. Si el programa explícitamente abre /dev/tty, se puede hablar a la terminal, independientemente de donde stdin, stdout, y stderr se señaló.En este caso, sin embargo, ya setsid lo arregla, parece que se adjunta al proceso de grupo que contiene a su intérprete de comandos, en lugar de la terminal.
    • Esta es la mejor. Funciona cada una de las 3 formas perfectamente ecplained para cada una de las propias necesidades. THx
    • gracias mucho @MarkReed esta fue una gran ayuda!

  2. 64
    nohup some_command > /dev/null 2>&1&
    

    Que es todo lo que usted necesita hacer.

    • Hubo otra respuesta que casi daba lo mismo, pero ellos no tienen el extra «&» en la final.
    • El & en la voluntad de mantener la necesidad de utilizar ctrl-c, si que es importante para usted.
    • La capacidad de funcionar en BG es muy útil
    • nohup some_command &>/dev/null & es incluso más corto.
    • Esto sólo es útil si no se agitaba sobre la captura de some_command de salida, incluyendo los de error.
  3. 11

    ¿Has probado la reorientación de todos los tres secuencias de e/S:

    nohup ./yourprogram > foo.out 2> foo.err < /dev/null &
    
    • No debería ser > /dev/null en vez de < /dev/null?
    • redirige la entrada estándar para nohup. Linux no necesita de esto, pero POSIX permite que el comportamiento de donde nohup no se puede ejecutar en segundo plano si la entrada estándar se conecta a la terminal. Ejemplos de tales sistemas BSD y mac OS X.
  4. 8

    Usted podría desear utilizar el separar programa. Utiliza como nohup pero no produce un registro de salida, a menos que se le indique. Aquí está el hombre de la página:

    NAME
           detach - run a command after detaching from the terminal
    
    SYNOPSIS
           detach [options] [--] command [args]
    
           Forks  a  new process, detaches is from the terminal, and executes com‐
           mand with the specified arguments.
    
    OPTIONS
           detach recognizes a couple of options, which are discussed below.   The
           special  option -- is used to signal that the rest of the arguments are
           the command and args to be passed to it.
    
           -e file
                  Connect file to the standard error of the command.
    
           -f     Run in the foreground (do not fork).
    
           -i file
                  Connect file to the standard input of the command.
    
           -o file
                  Connect file to the standard output of the command.
    
           -p file
                  Write the pid of the detached process to file.
    
    EXAMPLE
           detach xterm
    
           Start an xterm that will not be closed when the current shell exits.
    
    AUTHOR
           detach was written by Robbert Haarman.  See  http://inglorion.net/ for
           contact information.
    

    Nota no tengo ninguna afiliación con el autor del programa. Yo solo soy un usuario satisfecho de el programa.

    • El enlace no está roto y que el repositorio git es viejo. No incluye el actual v0.2.3.
  5. 5

    Siguiente comando permite ejecutar algo en el fondo sin llegar nohup.salida:

    nohup command |tee &
    

    De esta manera, usted será capaz de obtener la salida de la consola mientras se ejecuta la secuencia de comandos en el servidor remoto:
    ¿Cómo puedo utilizar el nohup comando sin llegar nohup.a cabo?

  6. 4
    sudo bash -c "nohup /opt/viptel/viptel_bin/log.sh $* &> /dev/null"  &
    

    Redirigir el resultado de sudo causas sudo para reask para la contraseña, por lo que una torpe mecanismo es necesario para hacer esta variante.

  7. 1

    que puede hacer a continuación
    nohup & > 2>&1 &
    por ejemplo,
    No tengo hup interior de comandos de secuencia de comandos
    ./Runjob.sh > sparkConcuurent.2>&1

  8. 0

    Si usted tiene un shell BASH en tu mac/linux en frente de usted, pruebe los siguientes pasos para entender la redirección prácticamente :

    Crear una 2 de la línea de comandos llamada zz.sh

    #!/bin/bash
    echo "Hello. This is a proper command"
    junk_errorcommand
    
    • El eco del comando de salida va a STDOUT filestream (descriptor de archivo 1).
    • El error del comando de salida va a STDERR filestream (descriptor de archivo 2)

    Actualmente, simplemente ejecutando el script envía STDOUT y STDERR a la pantalla.

    ./zz.sh
    

    Ahora a empezar con el estándar de redirección :

    zz.sh > zfile.txt
    

    En el anterior, «eco» (STDOUT) entra en el zfile.txt. Mientras que el «error» (STDERR) se muestra en la pantalla.

    El de arriba es el mismo como :

    zz.sh 1> zfile.txt
    

    Ahora usted puede probar lo contrario, y redirigir «error» STDERR en el archivo. El STDOUT de comando «echo» va a la pantalla.

    zz.sh 2> zfile.txt
    

    La combinación de los dos anteriores, se obtiene:

    zz.sh 1> zfile.txt 2>&1
    

    Explicación:

    • En PRIMER lugar, enviar STDOUT 1 a zfile.txt
    • A CONTINUACIÓN, enviar STDERR 2 a la salida estándar (STDOUT) 1 sí (mediante el uso de &1 puntero).
    • Por lo tanto, 1 y 2 va en el mismo archivo (zfile.txt)

    Finalmente, usted puede empacar toda la cosa dentro de nohup comando & a que se ejecute en segundo plano:

    nohup zz.sh 1> zfile.txt 2>&1&
    

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea