Pregunta ¿Cómo enviar un correo electrónico si se reinicia un servicio systemd?


Tengo una aplicación crítica que se ejecuta como un servicio por systemd.

Está configurado para reiniciar tan pronto como haya una falla.

¿Cómo enviar un correo electrónico si la aplicación se reinicia?


5
2017-09-30 01:04


origen


No sé cómo hacerlo con systemd, pero con monit puede hacer que vea un proceso y puede enviar una notificación si el ID de proceso cambia. - Zoredache


Respuestas:


Primero necesita dos archivos: un archivo ejecutable para enviar el correo y un servicio para iniciar el archivo ejecutable. Para este ejemplo, el ejecutable es solo un script de shell usando sendmail:

/usr/local/bin/systemd-email:

#!/bin/bash

/usr/bin/sendmail -t <<ERRMAIL
To: $1
From: systemd <root@$HOSTNAME>
Subject: $2
Content-Transfer-Encoding: 8bit
Content-Type: text/plain; charset=UTF-8

$(systemctl status --full "$2")
ERRMAIL

Cualquiera que sea el ejecutable que use, probablemente debería tomar al menos dos argumentos como lo hace este script de shell: la dirección a la que enviar y el archivo de la unidad para obtener el estado. los .service Creamos pasará estos argumentos:

/etc/systemd/system/status-email-user@.service:

[Unit]
Description=status email for %i to user

[Service]
Type=oneshot
ExecStart=/usr/local/bin/systemd-email address %i
User=nobody
Group=systemd-journal

Dónde usuario es el usuario que está siendo enviado por correo electrónico y dirección Es la dirección de correo electrónico de ese usuario. Aunque el destinatario está codificado, el archivo de la unidad sobre el que se informa se pasa como un parámetro de instancia, por lo que este servicio puede enviar correo electrónico para muchas otras unidades. En este punto puedes empezar status-email-user@dbus.service para verificar que puede recibir los correos electrónicos.

Luego simplemente edite el servicio para el que desea correos electrónicos y añada OnFailure=status-email-user@%n.service al [Unit] sección. %n Pasa el nombre de la unidad a la plantilla.

Fuente: archlinux wiki: systemd timers MAILTO


8
2017-09-30 07:39



Pero @Dave no requiere otro servicio. Desea que el servicio que ya usa pueda enviar correo en cada inicio / reinicio. Para eso, existe la opción ExecStartPost. - Jaroslav Kucera
@JaroslavKucera Creo que esto lo decide a la OP ... :) Además, no estoy seguro de si ExecStartPost es la elección correcta: también se activaría después de un inicio "normal", no solo en caso de falla, ¿verdad? - gf_
Me interesa por qué se ha votado tan abajo, por favor, levante la voz y hable. - gf_
Porque la pregunta no es sobre otro servicio, sino la modificación del servicio existente. Sí, ExecStartPost activaría el envío de correo incluso en el inicio normal. No tengo conocimiento de nada que funcione solo al reiniciar. - Jaroslav Kucera
@JaroslavKucera Bueno, parece que el OP no está de acuerdo, pero por supuesto, mantenga su opinión. - gf_


Puede intentar usar la opción de servicio systemd ExecStartPost.

La descripción está disponible aquí:

https://www.freedesktop.org/software/systemd/man/systemd.service.html

Puede haber más declaraciones de esta opción en el archivo de definición de servicio. Se dispara uno por uno.

También tendrás algunos ejemplos en tu sistema.


0
2017-09-30 07:38





Puede crear un script de shell para verificar el estado del servicio y enviar correos electrónicos mientras se inicia el servidor. Este enlace podría ayudarte

https://askubuntu.com/questions/814/how-to-run-scripts-on-start-up


-1
2017-09-30 05:24



Esta pregunta no es sobre el arranque, sino sobre el reinicio de un servicio, lo que puede suceder bastante después del arranque. Por lo tanto, no estoy seguro si su respuesta es de alguna ayuda. - gf_