El uso de nohup, & y redirección en el comando de inicio en segundo plano del shell de Linux

 1. Cómo usar nohup y &


1.1, nohup (no cuelgues)


nohup es una abreviatura de no colgado, que significa no colgar.

Al usar herramientas de cliente de Linux como Xshell para ejecutar scripts de Linux de forma remota, a veces debido a problemas de red, el cliente perderá la conexión, el terminal se desconectará y el script finalizará inesperadamente a la mitad. En este caso, puede usar el comando nohup para ejecutar el comando, incluso si el cliente está desconectado del servidor, el script en el servidor aún puede continuar ejecutándose.

formato de sintaxis nohup:

nohup  command  [arg...]


ilustrar:

  1. Además de no poder realizar operaciones de entrada (como ingresar comandos, saltos de línea, presionar espacios, etc.) ,
  2. La salida estándar se guarda en el archivo nohup.out .
  3. Después de cerrar el cliente, el comando aún se ejecutará sin colgar .

Por ejemplo:

Después de ejecutar el comando de script nohup sh test.sh , el terminal no puede recibir ninguna entrada y la salida estándar se enviará al archivo nohup.out en el directorio actual. Incluso después de cerrar xshell y salir, la sesión actual continúa ejecutándose.

1.2, & (interactivo)
& formato gramatical:

command   [arg...]   &



ilustrar:

  1. Puede realizar operaciones de entrada (como ingresar comandos, saltos de línea, presionar espacios, etc.) y puede realizar operaciones interactivas de entrada y salida.
  2. La salida estándar se guarda en el archivo nohup.out.
  3. Pero después de cerrar el cliente, el programa se detendrá inmediatamente .

Por ejemplo:

Después de ejecutar el comando sh test.sh & script, cierre xshell y el programa de script se detendrá inmediatamente.

1.3 Use el formato de sintaxis nohup y & juntos (sin colgar, interactivo)
:

nohup   command  [arg...]  &



ilustrar:

  1. Puede realizar operaciones de entrada (como comandos de entrada, líneas nuevas, espacios en blanco, etc.) y puede realizar operaciones de entrada y salida interactivas.
  2. La salida estándar se guarda en nohup.out,
  3. Los comandos aún se ejecutarán después de que se cierre el cliente.

Ejemplo:
después de ejecutar el comando nohup sh test.sh &, se puede realizar la operación de entrada y el registro de salida estándar se escribe en el archivo nohup.out Incluso si se cierra xshell y se sale de la sesión actual, el comando del script continúa correr.

El problema de entrada y salida se ha resuelto, ¿es perfecto? De hecho, todavía hay un problema que no se ha resuelto, ¡lea a continuación!

2. Redirección de registro>


El nombre predeterminado del archivo de registro mencionado anteriormente es nohup.out. Si modifica el nombre del archivo de registro, se utiliza la redirección. El símbolo es > y el formato de sintaxis es

 > logFile



ilustrar:

> es el símbolo de redirección.
logFile es el nombre del archivo de registro, preferiblemente en inglés y números.
En este momento, el formato gramatical utilizado por nohup, & y > juntos:

nohup  command >logFile  &



Ejemplo:

nohup  start.sh >aa.log  &



Nota: Después de ejecutar el comando anterior, puede ingresar o ejecutar en segundo plano, y el registro en ejecución se envía al registro aa.log.

3. Manejo de mensajes de error

nohup  command >logFile  &



Aunque resuelve el problema de entrada y salida y puede ejecutarse en segundo plano, hay otro elemento que indica que la información de error no se puede enviar al archivo de registro. Para resolver este problema, debe agregar el comando 2 > archivo.

La salida estándar y los mensajes de error se utilizan al mismo tiempo, y el formato de sintaxis es el siguiente:

>logFile1   2 >logFile2



Algunas personas pueden preguntarse, ¿qué significa 2? Porfavor lea abajo.

3.1 Símbolos de entrada, salida y mensajes de error estándar de Linux


Símbolos para entrada, salida y mensajes de error estándar de Linux:

0 significa entrada de información estándar stdin (entrada estándar);
1 significa salida de información estándar stdout (salida estándar);
2 significa información de error stderr (error estándar);
/dev/null significa archivo de dispositivo vacío. Utilice este parámetro si no desea generar ningún registro.
Repasemos de nuevo el ejemplo anterior:

>logFile1   2 >logFile2



> logFile1: a saber, 1 >logFile1, 1 es la salida de información estándar, que es la predeterminada y se puede omitir, logFile1 es el nombre del archivo de registro.

2 >logFile2: 2 es el mensaje de error, es decir, el mensaje de error se enviará al archivo logFile2.

En este punto, comprenda el significado de 2!

3.2 El mensaje de error y la salida estándar están en el mismo archivo
Si desea colocar el mensaje de error y la salida estándar en el mismo archivo, use 2>&1. La sintaxis es la siguiente:

>logFile   2>&1



ilustrar:

>logFile indica que la información estándar se envía al archivo logFile;
2>&1 indica que 2 (información de error) se redirige y se envía a 1 (salida estándar).
El uso común de los dos significa que tanto 2 (información de error) como 1 (salida estándar) se envían al mismo archivo (archivo de registro).

3.3 Pensando: ¿Qué debo hacer si no quiero generar información de registro?
Sugerencia: /dev/null significa archivo de dispositivo vacío. Utilice este parámetro si no desea generar ningún registro.

4. Uso integral (recomendado)
En resumen, la función más completa, la sintaxis recomendada es la siguiente:

nohup  command  >logFile   2>&1  &



Ejemplo:

nohup  start.sh > mySysLog.log  2>&1   &



Explicación: después de ejecutar el comando, la salida estándar (1) y la información de error (2) se escriben en el archivo mySysLog.log.

5. Ampliación del conocimiento


5.1 Limpiar nohup.out directamente sin detener el servicio


Si el script continúa ejecutándose, el registro nohup.out seguirá creciendo, pero la capacidad del disco duro del registro es limitada. ¿Cómo reducir el tamaño del archivo de registro?
Tenga en cuenta que no elimine el archivo de registro directamente, de lo contrario, el servicio no podrá generar el registro y el servicio dejará de ejecutarse inmediatamente debido a la anomalía, que es el accidente de producción más grave.

Hay dos formas de borrar directamente el archivo nohup.out sin detener el servicio:

# 第1种:
cat /dev/null > nohup.out

# 第2种:
cp /dev/null nohup.out



5.2 Registrar solo registros con un nivel de advertencia relativamente alto


Hay demasiados registros de salida y nohup.out crece muy rápido. Para los registros sin importancia, no puede grabarlos y elija registrar solo los registros con un nivel de advertencia relativamente alto.

# Solo se envían mensajes de error al archivo de registro, no se envían otros registros

nohup ./program > /dev/null   2>error.log  &



5.3, no quiero generar registros


No quiero generar registros, y no quiero ningún registro, siempre que el servicio pueda ejecutarse normalmente.

# No hay salida de registro
nohup ./program > /dev/null 2>&1 &
—————————————————
 

Supongo que te gusta

Origin blog.csdn.net/u010919402/article/details/127900305
Recomendado
Clasificación