Aquí hay algunas preguntas y respuestas con respecto a ser alertado cuando un proceso se completa / sale ( 1 , 2 ), pero todos asumen que el usuario ha emitido dicho proceso y, por lo tanto, puede escribirlo con una alerta incorporada en el guión de gobierno, o canalizar el proceso a algún tipo de alerta.
Mi situación es que me gustaría recibir una alerta sobre la finalización / salida de un proceso que mi usuario no está inicializando. A saber, estoy procesando masivamente archivos de video masivos en un servidor Ubuntu 12.04 LTS. Ciertas operaciones en estos archivos llevan mucho tiempo, por lo que me gustaría algún tipo de alerta (el correo electrónico sería genial) cuando finalice uno específico. Tardan tanto, que hacer esto de forma puntual, manualmente, en base a PIT estaría perfectamente bien.
Para proporcionar más información, digamos que estoy procesando un archivo particularmente grande, y veo que ha progresado a un script FFMPEG, el proceso en sí mismo es un script de Python (que es bastante complejo y no está escrito por mí mismo, y algo No deseo modificar, aunque ese sería el primer enfoque lógico). Me imagino emitiendo un comando o script con el PID de dicho script python en ejecución como argumento, y cuando el proceso con ese PID ya no se ejecuta, el script de alerta hace lo suyo.
¿Algunas ideas?
Respuestas:
Escribí process_watcher.py
Actualmente, el cuerpo del correo electrónico se ve así:
Escribe un problema de GitHub si necesitas alguna mejora.
fuente
¿Algo como esto?
Reemplace
$pid
con la identificación del proceso yecho "finished"
con lo que quiera hacer cuando finalice el proceso.Por ejemplo:
fuente
kill -0
informaNo such process
sobre pids inexistentes yOperation not permitted
para pids propiedad de un usuario diferente, por lo que quizás interpretar el mensaje de error debería obviar la necesidad desudo
echo -en "\007 \007 \007"
, lo que emitirá una 'campana' terminal. Si eso se traduce en un sonido audible real depende de su terminal y hardware (pero generalmente lo hace).Solía
&&
ejecutar un segundo comando cuando el primero se completa con éxito. Aquí algunos ejemplos:Eliminar una carpeta grande y un pitido:
Compile un núcleo y envíe un correo electrónico:
¿Es esta una buena manera de resolver su problema? En otro caso, puede agregar un
||
y un tercer comando en caso de falla.Además, un script de shell podría recibir el estado de salida (
$?
) de su comando, y conif/else
y bucles puede hacer lo que quiera.fuente
Si no tiene el pid, esto se ejecutará hasta que todas las instancias de ffmpeg hayan terminado:
fuente
Si no desea utilizar una opción de sondeo o un script externo, y ya ha comenzado el proceso de ejecución prolongada, puede suspenderlo con CTRL + Z (envía la señal SIGTSTP) y luego reanudarlo con
fg
(mueve el proceso a el primer plano).Por ejemplo:
fuente
Hice una aplicación que enviará una notificación a su teléfono Android cuando finalice un proceso para que no tenga que estar atado a su computadora.
Instale, luego agregue
;notifier.sh
al final de su comando.Por ejemplo, si su comando fuera
make install
, haría su comando:make install; notifier.sh
https://notifier.sh
https://play.google.com/store/apps/details?id=sh.notifier
fuente