Ich weiß nicht, wie es mit systemd geht, aber mit monit können Sie einen Prozess überwachen lassen und eine Benachrichtigung senden, wenn sich die Prozess-ID ändert.
Zoredache
Antworten:
14
Zuerst benötigen Sie zwei Dateien: eine ausführbare Datei zum Senden der E-Mail und einen .service zum Starten der ausführbaren Datei. In diesem Beispiel ist die ausführbare Datei nur ein Shell-Skript, das Folgendes verwendet sendmail:
Unabhängig davon, welche ausführbare Datei Sie verwenden, sollte es wahrscheinlich mindestens zwei Argumente geben, wie dies bei diesem Shell-Skript der Fall ist: die Adresse, an die gesendet werden soll, und die Einheitendatei, um den Status von zu erhalten. Das, was .servicewir erstellen, wird diese Argumente übergeben:
/etc/systemd/system/[email protected]:
[Unit]
Description=status email for %i to user
[Service]
Type=oneshot
ExecStart=/usr/local/bin/systemd-email address %i
User=nobody
Group=systemd-journal
Wobei Benutzer der Benutzer ist, dem eine E-Mail gesendet wird, und Adresse die E-Mail-Adresse dieses Benutzers ist. Obwohl der Empfänger fest codiert ist, wird die zu meldende Einheitendatei als Instanzparameter übergeben, sodass dieser eine Dienst E-Mails für viele andere Einheiten senden kann. An diesem Punkt können Sie [email protected]überprüfen, ob Sie die E-Mails erhalten können.
Bearbeiten Sie dann einfach den Dienst, für den Sie E-Mails wünschen, und fügen Sie ihn OnFailure=status-email-user@%n.servicedem [Unit]Abschnitt hinzu. %nÜbergibt den Namen der Einheit an die Vorlage.
@ Dave benötigt jedoch keinen anderen Dienst. Er möchte, dass der Dienst, den er bereits verwendet, bei jedem Start / Neustart E-Mails senden kann. Dafür gibt es die ExecStartPost-Option.
Jaroslav Kucera
@JaroslavKucera Ich denke das, um es bis zum OP zu entscheiden ... :) Außerdem bin ich mir nicht sicher, ob ExecStartPostes die richtige Wahl ist: Es würde auch nach einem "normalen" Start ausgelöst, nicht nur im Falle eines Fehlers, richtig ?
gf_
Ich bin interessiert, warum dies abgelehnt wird - bitte erheben Sie Ihre Stimmen und sprechen Sie!
gf_
Denn es geht nicht um einen anderen Dienst, sondern um eine Änderung des vorhandenen Dienstes. Ja, ExecStartPost würde das Senden von E-Mails auch beim normalen Start auslösen. Mir ist nichts bekannt, was nur beim Neustart funktionieren würde.
Jaroslav Kucera
@ JaroslavKucera Nun, es scheint, dass das OP nicht einverstanden ist, aber natürlich behalten Sie Ihre Meinung.
gf_
0
Sie können versuchen, die systemd-Dienstoption ExecStartPost zu verwenden.
Sie können ein Shell-Skript erstellen, um den Dienststatus zu überprüfen und E-Mails zu senden, während der Server hochfährt. Dieser Link könnte Ihnen helfen
Bei dieser Frage geht es nicht um das Booten, sondern um einen Neustart des Dienstes, der einige Zeit nach dem Booten auftreten kann. Daher bin ich mir nicht sicher, ob Ihre Antwort hilfreich ist.
Antworten:
Zuerst benötigen Sie zwei Dateien: eine ausführbare Datei zum Senden der E-Mail und einen .service zum Starten der ausführbaren Datei. In diesem Beispiel ist die ausführbare Datei nur ein Shell-Skript, das Folgendes verwendet
sendmail
:Unabhängig davon, welche ausführbare Datei Sie verwenden, sollte es wahrscheinlich mindestens zwei Argumente geben, wie dies bei diesem Shell-Skript der Fall ist: die Adresse, an die gesendet werden soll, und die Einheitendatei, um den Status von zu erhalten. Das, was
.service
wir erstellen, wird diese Argumente übergeben:Wobei Benutzer der Benutzer ist, dem eine E-Mail gesendet wird, und Adresse die E-Mail-Adresse dieses Benutzers ist. Obwohl der Empfänger fest codiert ist, wird die zu meldende Einheitendatei als Instanzparameter übergeben, sodass dieser eine Dienst E-Mails für viele andere Einheiten senden kann. An diesem Punkt können Sie
[email protected]
überprüfen, ob Sie die E-Mails erhalten können.Bearbeiten Sie dann einfach den Dienst, für den Sie E-Mails wünschen, und fügen Sie ihn
OnFailure=status-email-user@%n.service
dem[Unit]
Abschnitt hinzu.%n
Übergibt den Namen der Einheit an die Vorlage.Quelle: archlinux wiki: systemd timer MAILTO
quelle
ExecStartPost
es die richtige Wahl ist: Es würde auch nach einem "normalen" Start ausgelöst, nicht nur im Falle eines Fehlers, richtig ?Sie können versuchen, die systemd-Dienstoption ExecStartPost zu verwenden.
Die Beschreibung finden Sie hier:
https://www.freedesktop.org/software/systemd/man/systemd.service.html
Die Deklaration der Dienstdefinitionsdatei kann weitere Deklarationen dieser Option enthalten. Es wird eins nach dem anderen ausgelöst.
Sie haben auch einige Beispiele in Ihrem System.
quelle
Sie können ein Shell-Skript erstellen, um den Dienststatus zu überprüfen und E-Mails zu senden, während der Server hochfährt. Dieser Link könnte Ihnen helfen
/ubuntu/814/how-to-run-scripts-on-start-up
quelle