ubuntuusers.de

Start/Stop Script

Status: Gelöst | Ubuntu-Version: Ubuntu 22.04 (Jammy Jellyfish)
Antworten |

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14314

Nexus1 schrieb:

Enabled

user@server:~$ systemctl is-enabled bootemail.service
bootemail.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install is-enabled bootemail
enabled

Active

user@server:~$ systemctl is-active bootemail.service
active

D. h., schon das alleinige reinstellen eines ausführbaren und eines syntaktisch korrekt verfassten Start-Stop-Scriptes, in das Verzeichnis "/etc/init.d", führt dazu, dass die daraus generierte (nicht native) service-unit enabled (aktiviert) ist und beim booten auch active (d. h. ausgeführt wird) ist(?).

Nexus1

(Themenstarter)

Anmeldungsdatum:
17. September 2022

Beiträge: 34

lubux schrieb:

schon das alleinige reinstellen...

Wenn ich das Script mal wieder lösche, wird dann auch die Unit wieder automatisch gelöscht?

sudo update-rc.d -f bootemail remove

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14314

Nexus1 schrieb:

Wenn ich das Script mal wieder lösche, wird dann auch die Unit wieder automatisch gelöscht?

Ja, ... aber Du musst das Script (noch) nicht löschen. Verschiebe das Script in einen anderen Ordner und/oder führe:

chmod 644 <Script>

aus.

Nexus1

(Themenstarter)

Anmeldungsdatum:
17. September 2022

Beiträge: 34

Hier hab ich einen Thread zum erstellen von DropIn-Dateien, der ist aber für Suse. Kann ich das gefahrlos für UbuntuServer übernehmen oder nicht?

https://documentation.suse.com/de-de/sles/12-SP5/html/SLES-all/cha-systemd.html

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14314

Nexus1 schrieb:

Kann ich das gefahrlos für UbuntuServer übernehmen oder nicht?

Ja. Siehe aber auch nach drop-in, in z. B.: https://www.freedesktop.org/software/systemd/man/systemd.unit.html

(oder gleichwertig).

Nexus1

(Themenstarter)

Anmeldungsdatum:
17. September 2022

Beiträge: 34

Also hier mal mein erster naiver Versuch eine Unit zu erstellen. Anregungen sind ausdrücklich erwünscht:

[Unit]
Description=Send eMail on boot, send eMail on Shutdown

After=systemd-time-wait-sync.service sys-subsystem-net-devices-<enp2s0>.device 
After=network.target network-online.target

Requires=systemd-time-wait-sync.service sys-subsystem-net-devices-<enp2s0>.device

wants=network-online.target

[Service]
Type=simple
ExecStart=echo -e "Subject: Betreff\n\nInhalt" | /user/bin/msmtp/msmtp xxx@web.de

[Install]
WantedBy=multi-user.target

Ich hab da absichtlich 2 "After=" Einträge drin, zwecks Übersichtlichkeit. Ob das funktioniert muss ich noch rausfinden.

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

IMHO reicht das network-online.target, weil das so ziemlich das letzte Target ist, was erreicht wird. Und ohne könntest du sowie keine Mail versenden 😉 Damit ist auch das erste wants überflüssig.

Gruß, noisefloor

Nexus1

(Themenstarter)

Anmeldungsdatum:
17. September 2022

Beiträge: 34

Also so?

[Unit]
Description=Send eMail on boot, send eMail on Shutdown
After=network-online.target
Requires=systemd-time-wait-sync.service sys-subsystem-net-devices-<enp2s0>.device

[Service]
Type=simple
ExecStart=echo -e "Subject: Betreff\n\nInhalt" | msmtp xxx@web.de

[Install]
WantedBy=multi-user.target

Ich hab noch nicht rausgefunden wie ich beim Shutdown eine eMail erhalte. Das hier gilt nur für den Start oder?

Und brauch ich den vollen Pfad zu msmtp oder nicht?

Nexus1

(Themenstarter)

Anmeldungsdatum:
17. September 2022

Beiträge: 34

Wenn ich mein Script starte muss es ja auch beim Shutdown nochmal gestartet werden? Und wie wird dem Script ein Argument übergeben?

[Unit]
Description=Send eMail on boot, send eMail on Shutdown
After=network-online.target
Requires=systemd-time-wait-sync.service sys-subsystem-net-devices-<enp2s0>.device

[Service]
Type=simple
ExecStart=statmail

[Install]
WantedBy=multi-user.target

karzer Team-Icon

Wikiteam
Avatar von karzer

Anmeldungsdatum:
10. April 2022

Beiträge: 1533

Wohnort: Bad Oeynhausen

Über ExecStart? Außerdem, warum steht da statmail?

Vielleicht ist das hier zum Erstellen von systemd Service-Units auch ganz hilfreich.

Nexus1

(Themenstarter)

Anmeldungsdatum:
17. September 2022

Beiträge: 34

karzer schrieb:

warum steht da statmail?

Ich hab das bootmail script in statmail umbenannt, trifft besser den Zweck.

karzer schrieb:

Über ExecStart?

Ja aber muss ich das Arument angeben oder wird es vom System übergeben?

Muss ich also das machen:

ExecStart=statmail

oder das:

ExecStart=statmail start

oder was ganz anderes?

karzer Team-Icon

Wikiteam
Avatar von karzer

Anmeldungsdatum:
10. April 2022

Beiträge: 1533

Wohnort: Bad Oeynhausen

Nexus1 schrieb:

Ja aber muss ich das Arument angeben oder wird es vom System übergeben?

Muss ich also das machen:

ExecStart=statmail

oder das:

ExecStart=statmail start

oder was ganz anderes?

Welches Argument soll das denn sein? Was ist denn start? Brauchst Du das zum Skriptstarten?

Außerdem ufert das hier ganz schön in Richtung „Systemeinrichtung und Verwaltung“ aus, da könntest Du die Frage auch stellen.

Nexus1

(Themenstarter)

Anmeldungsdatum:
17. September 2022

Beiträge: 34

Anhand des Arguments wird innerhalb des Scripts entschieden ob der SystemStatus "Boot" oder "Shutdown" ist.

Aktueller Stand des Scripts "statmail":

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/bin/sh
### BEGIN INIT INFO
# Provides:          statmail
# Required-Start:    $network-online
# Required-Stop:
# Default-Start:     1 2 3 4 5
# Default-Stop:      0 6
# Short-Description: Send eMail on boot, send eMail on shutdown
# Description:
### END INIT INFO

PATH=/sbin:/usr/sbin:/bin:/usr/bin

. /lib/lsb/init-functions

case "$1" in
  start|status)
    echo -e "Subject: Message from Server\n\nServer is booting" | msmtp xxx@web.de
    date +"%Y-%m-%d %H:%M:%S   Start" >> /var/log/bootemail.log
    ;;
  stop)
    echo -e "Subject: Message from Server\n\nServer is shutting down" | msmtp xxx@web.de
    date +"%Y-%m-%d %H:%M:%S   Stop" >> /var/log/bootemail.log
    ;;
  restart|reload|force-reload)
    echo "Error: argument '$1' not supported" >&2
    date +"%Y-%m-%d %H:%M:%S   Wrong Service Parameter" >> /var/log/bootemail.log
    exit 3
    ;;
  *)
    echo "Usage: $0 start|stop" >&2
    date +"%Y-%m-%d %H:%M:%S   Wrong Script Parameter" >> /var/log/bootemail.log
    exit 3
    ;;
esac

Nexus1

(Themenstarter)

Anmeldungsdatum:
17. September 2022

Beiträge: 34

Mir ist grade nicht ganz klar ob ich in der Unit einfach den Befehl msmtp oder das Script aufrufen soll.

Wenn ich msmtp aufrufe, wie unterscheide ich dann zwischen "Boot" und "Shutdown"?

ExecStart=echo -e "Subject: Betreff\n\nInhalt" | msmtp xxx@web.de

Wenn ich das Script aufrufe, wie wird dem Script das Argument übergeben?

ExecStart=statmail

Oder muss ich eine Unit für Boot und eine Unit für Shutdown machen?

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14314

Nexus1 schrieb:

Mir ist grade nicht ganz klar ob ich in der Unit einfach den Befehl msmtp der das Script aufrufen soll.

Wenn ich msmtp aufrufe, wie unterscheide ich dann zwischen "Boot" und "Shutdown"?

Ich denke Du solltest das ausführen beim booten und beim shutdown, trennen. Beim booten ist es einfacher und sollte auch klar sein.

Versuch mal 2 Möglichkeiten beim/für den Fall mit shutdown:

1. Schau nach ob es das Verzeichnis "/usr/lib/systemd/system-shutdown" gibt und wenn ja, dann stelle in dieses Verzeichnis ein geeignetes ausführbares Script, das die email sendet. Das Script kannst Du ja vorher in der Konsole testen. Wenn es aus diesem Verzeichnis, beim shutdown nicht funktioniert, dann stimmt etwas mit den Abhängigkeiten nicht (weil. evtl. keine Internet-/Netzwerkverbindung mehr vorhanden).

2. Erstelle eine service-unit wie folgt:

[Unit]
Description=<Beschreibung ...>
DefaultDependencies=no
Before=shutdown.target reboot.target

[Service]
Type=oneshot
ExecStart=/<Pfad>/<zum>/<ausführbaren-Script>
TimeoutStartSec=0

[Install]
WantedBy=shutdown.target reboot.target

und alles was so dazu gehört (daemon-reload, start, evtl. enable, etc., ...).

BTW: Wenn ich in Beispielen die spitzen Klammern <> benutze, solltest Du wissen was das bedeutet. Du hast weiter oben schon den Fehler mit <enp2s0>, gemacht.