linux - tag - picard setup 1.4 2
Comience el script después de que termine otro(ya en ejecución) (8)
Así que tengo un proceso en ejecución, y tomará varias horas completarlo. Me gustaría comenzar otro proceso inmediatamente después de que termine, automáticamente. Tenga en cuenta que no puedo agregar una llamada al segundo script en el primero, ni crear otro que ejecute secuencialmente ambos. ¿Hay alguna forma de hacer esto en Linux?
Editar: Una opción es sondear cada x
minutos usando pgrep y verificar si el proceso finalizó. Si lo hizo, comienza el otro. Sin embargo, no me gusta esta solución.
PD: Ambos son scripts bash, si eso ayuda.
A menudo ocurre que tu programa está ejecutando varios demonios. En ese caso, tu pid será una matriz. Solo usa:
PID = ($ (pidof -x process_name)) #this guarda todos los PID del proceso dado en la matriz $ pid
Ahora, simplemente modifica el código de thiton como:
while ps -p ${PID[*]}; do sleep 1; done ; script2
Dado el PID del primer proceso, el ciclo
while ps -p $PID; do sleep 1; done ; script2
debería hacer el truco. Esto es un poco más estable que los nombres pgrep y de proceso.
El sondeo es probablemente el camino a seguir, pero no tiene por qué ser horrible.
pid=$(ps -opid= -C your_script_name)
while [ -d /proc/$pid ] ; do
sleep 1
done && ./your_other_script
La forma más fácil:
./script1.sh && ./script2.sh
El && dice esperar a la finalización exitosa de script1 antes de continuar con script2.
Puede wait
el proceso ya en ejecución utilizando bash built-in command wait
. hombre bash .
wait [n ...] Espere cada proceso especificado y regrese su estado de finalización. Cada n puede ser un ID de proceso o una especificación de trabajo; si se proporciona una especificación de trabajo, se esperan todos los procesos en la cartera de ese trabajo. Si no se proporciona n, se esperan todos los procesos hijo actualmente activos y el estado de retorno es cero. Si n especifica un proceso o trabajo inexistente, el estado de devolución es 127. De lo contrario, el estado de devolución es el estado de salida del último proceso o trabajo esperado.
Tal vez puede presionar ctrl + z primero e ingresar
fg; echo "first job finished"
Tenía el mismo requisito y lo resolví de la siguiente manera:
while [[ "$exp" != 0 ]]; do
exp=$(ps -ef |grep -i "SCRIPT_1" |grep -v grep |wc -l)
sleep 5;
done
llama SCRIPT_2
Tuve un problema similar y lo resolvió de esta manera:
nohup bash script1.sh &
Espere
nohup bash script2.sh &