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.