ver sirve segundo script que procesos plano para detener como linux unix shell background-process

segundo - para que sirve nohup en linux



¿Cómo encontrar si un script ejecutado como un nohup terminó o no? (6)

Al comienzo de su script de shell, escriba el PID en un archivo (por ejemplo, en / var / run). Luego, solo puede buscar ese PID para saber si el proceso se realizó o no. Puede obtener el PID de su script de shell utilizando la variable $$ incorporada.

Para grabar el PID, coloque en la parte superior de su script:

echo $$ > /var/run/myscript.pid

Luego, para comprobar si todavía se está ejecutando:

ps -p `cat /var/run/myscript.pid`

Es posible que no pueda escribir en /var/run como un usuario normal. Si no, solo usa /tmp

Intenté ejecutar un script usando nohup como,

nohup script.sh &

Cuando lo intente

ps -ef | grep "script.sh"

No lo encontré allí, excepto por el grep que se está ejecutando con esa cadena como parámetro.

¿Lo estoy haciendo bien?. ¿Significa esto que el proceso ha terminado de ejecutarse? Gracias.


Código:

ps r

para reportar todos los procesos en ejecución.


PS es definitivamente parte de ksh y ksh93.

echo $SHELL

le mostrará qué shell está ejecutando.

Ejemplo de uso razonable de &

#!/bin/ksh nohup ./myscript.sh argument1 2>&1> mylogfile & # do some other task cnt=0 while [ $cnt -le 100 ] do # work on another task here cnt=$(( $cnt + 1 )) done wait

La instrucción de espera se detiene para cualquier proceso secundario que aún esté en ejecución. Normalmente, no ejecutas un proceso en segundo plano, esperas que se ejecute para siempre y luego lo olvidas por completo.

Si desea un proceso completamente separado que se ejecute para siempre, considere un demonio. Algunas personas escriben daemons en shell, no en la mejor práctica, pero está hecho. Normalmente los daemons de UNIX están escritos en C.

El capítulo 13 de la Programación avanzada de Stevens en el entorno UNIx ''2ed trata de los demonios.


Seguí la sugerencia de scompt.com modificando mi script para almacenar el pid

Entonces me di cuenta de que el pid se escribe en la salida, por lo que no hay necesidad de almacenarlo:

$ nohup ./sync-all.production.sh > sync-all.production.log & [1] 3428


Sujeto a la implementación de nohup, pero en la mayoría de los casos funcionará. despues de correr

nohup script.sh &

almacenar el PID en una variable. PS Es el PID del último proceso en segundo plano.

HISPID=$!

Luego puedes verificar si está ahí con ps o kill:

ps -p $HISPID kill -0 $HISPID

A diferencia de la otra solución publicada, esto no requiere modificar el script.sh


lo que ha funcionado es

sudo ps -e | grep [script name or fragment of name]

por ejemplo, para un script llamado "mf-sync.js"

sudo ps -e | grep mf-sync

muestra el nombre del script y el pid; entonces puedo usar, por ejemplo si pid fue 1234

sudo kill 1234

a continuación, necesito agregar un tiempo de espera para eliminarlo automáticamente después de que haya transcurrido el tiempo suficiente para que se ejecute normalmente, pero esa es otra pregunta

Mientras tanto, puedo cuidar a este proceso para ejecutar la sincronización para mi cliente, hasta que tenga tiempo para probar el tiempo de espera en un script.