Soy un científico computacional y ejecuto muchos cálculos largos en Linux. Específicamente, ejecuto simulaciones de dinámica molecular (MD) usando el paquete GROMACS. Estas simulaciones pueden llevar días o semanas, ejecutándose (por ejemplo) de 8 a 24 núcleos. Tengo acceso a varios nodos de un clúster, lo que significa que en cualquier momento estoy ejecutando aproximadamente 4 o 5 trabajos (cada uno en un nodo diferente y cada uno en 8-24 núcleos).
El problema es que la simulación lleva una cantidad de tiempo variable. Me gusta mantener todos los nodos trabajando en simulaciones durante todo el día, pero para comenzar una nueva simulación, necesito iniciar sesión con un terminal y hacer un trabajo manual. Pero siempre olvido cuánto tiempo queda en una simulación, así que siempre termino constantemente revisándolos.
¿Hay alguna forma de recibir un correo electrónico cuando finaliza un proceso de Linux? ¿Podría haber un programa de Linux que haga esto? De esa manera sabría cuándo iniciar sesión con un terminal y preparar la próxima simulación.
Estoy usando Ubuntu Linux. Gracias por tu tiempo.
Respuestas:
Los trabajos enviados al
at
demonio le enviarán cualquier salida de stderr y stdout al finalizar. También se puede configurar para enviar correo incluso si el trabajo no tiene salida. También tiene la ventaja de ejecutarse sin un terminal de control, por lo que no tiene que preocuparse por el efecto que tendrá el cierre de su terminal en el trabajo.ejemplo:
Cuando este trabajo se complete, el usuario que envió el trabajo recibirá un correo electrónico, y si hay algún resultado, lo recibirá. Puede cambiar el destinatario del correo electrónico cambiando la
LOGNAME
variable de entorno.at
tiene un modo por lotes donde puede poner en cola trabajos para ejecutar cuando el sistema no está ocupado. Este no es un sistema de colas muy bueno cuando varios usuarios compiten por los recursos, pero no obstante, si desea ejecutar trabajos con él:Por defecto, los trabajos no se iniciarán a menos que la carga del sistema sea inferior a 1.5, pero esa cifra de carga se puede ajustar (y con 24 núcleos, diría que debería). Pueden ejecutarse en paralelo si no aumentan la carga por encima del límite de carga (1,5 por defecto de nuevo), o si aumentan la carga individualmente por encima de 1,5, se ejecutarán en serie.
Puede ver la cola de trabajos con
atq
y eliminar trabajos conatrm
Responde dependencias:
atd
daemon (ps -ef|grep atd
)atd
(no denegado por/etc/at.deny
//etc/at.allow
configuraciones)sendmail
MTA funcionalLa mayoría de los sistemas no tienen problemas con estos requisitos, pero vale la pena verificarlos.
fuente
Si hay
Donde -s "texto" es el asunto, el eco le da al correo un texto para enviarle.
fuente
mail
comando requiere que el MTA local esté configurado correctamente. Esta es la solución fácil y simple.mail
para enviarle la salida del comando:{ command; echo Done; } | mail -s "subject" [email protected]
screen
otmux
, pero puede ser difícil tener un terminal abierto en algún lugar durante días / semanas sin él. La soluciónat
para la gestión del trabajo también se ocuparía de ese problema.&
al final del comando para que se ejecute en segundo plano.sleep 30 && echo "Process done" | mail -s "Process done" [email protected] &
nohup
para desvincular ellos, pero también perder la capacidad de seguir controlando desde el shell. Esto es parcialmente para lo quetmux
sirve. Divide los procesos en ejecución de su sesión de terminal conectada y vista activa mientras le permite interactuar con ellos normalmente.Recomiendo configurar un script de Python para enviar un correo electrónico, son muy fáciles de escribir y configuran los servidores de correo correctos para cualquier servicio que use. Se ven algo así:
Use esto junto con el operador de tubería sugerido en las otras respuestas.
Otra gran solución que he encontrado para este problema es usar Pushover . Pushover: "Pushover facilita el envío de notificaciones en tiempo real a sus dispositivos Android e iOS". Configuré un script simple que completó la API fácil para enviar un mensaje a mi teléfono cuando mis compilaciones están listas.
fuente
También puede usar el
trap
comando para enviar correo al salir del proceso, o al interrumpir, colgar o al finalizar el proceso. Aquí está el código que debe colocar en la parte superior de su secuencia de comandos.Arun
fuente
Escribí process_watcher.py
Actualmente, el cuerpo del correo electrónico se ve así:
Escribe un problema de GitHub si necesitas alguna mejora.
fuente
fg ‹PID›; mail -s Completed [email protected] <<< 'Message here'
.Tengo un guión de cosecha propia que funciona para mí. Uso:
Enviará un correo electrónico con información significativa sobre el tema y con la salida del proceso en el cuerpo.
Las instrucciones de instalación se encuentran en la página principal del repositorio de GitHub , actualmente para todos los scripts en los que se crea un enlace simbólico
~/bin
.fuente
Suponiendo que su programa ya se esté ejecutando, use bash + pgrep para verlo.
fuente
Hace años, creé este alias (en csh, ahora lo uso en tcsh):
alias shunt "( \!* | Mail -s 'Output of: \!*' $user) >& /dev/null &"
Requiere que
Mail
esté instalado y funcionando en su sistema, pero tiene la ventaja de que su comando se ejecuta exactamente como lo haría desde la línea de comando (incluidos los alias, las expansiones de tilde, etc.) cuando ejecuta un trabajo usandoat
ocron
se ejecuta de manera predeterminada entorno que puede ser lo suficientemente diferente como para que su script falle o proporcione resultados inusuales (eso me ha mordidocron
muchas veces)fuente