Shellscript in Entlosschleife starten per Systemd

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Shellscript in Entlosschleife starten per Systemd

Beitrag von Richard » 21.12.2018 17:40:22

Hallo,

ich lasse ein simples Shellscript - das einen bestimmten Ordner per inotify auf Änderungen überwacht - über Systemd starten. Die Service-Datei sieht so aus:

Code: Alles auswählen

[Unit]
Description = inotify
[Service]
Type=oneshot
ExecStart=/home/pi/watch-folder
User=pi
[Install]
WantedBy = multi-user.target
Danach die Unit aktiviert und gestartet. Zum einen kam ich nach 'sudo systemctl start inotify.service' nicht wieder zum Eingabeprompt. Es sah aus als ob hier schon das Script in Endlosschleife läuft und arbeitet. Der Cursor sprang einfach nur in die nächste Zeile. Zum anderen sieht die Statusanzeige anders aus als sonst:

Code: Alles auswählen

Loaded: loaded (/etc/systemd/system/inotify.service; enabled; vendor preset: enabled)
Active: activating (start) since Fri 2018-12-21 17:27:26 CET; 25s ago
Das müsste sonst 'active' oder so ähnlich stehen, hier steht nur 'loaded'. Ist das, da es sich um kein richtiges Programm handelt sondern nur ein Shell-Script? Es scheint einem ersten Test nach zu funktionieren.

DeletedUserReAsG

Re: Shellscript in Endlosschleife starten per systemd

Beitrag von DeletedUserReAsG » 21.12.2018 17:52:24

Beendet sich dein Script nicht, sondern beinhaltet selbst ’ne Endlosschleife? Beziehungsweise, bleibt dein Script im Vordergrund?

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Shellscript in Entlosschleife starten per Systemd

Beitrag von rendegast » 21.12.2018 22:10:14

Ich habe hier so eine Lösung für ein sich sauber beendendes Skript

Code: Alles auswählen

...
#Type=oneshot
#ExecStart=/home/pi/watch-folder

ExecStart=/etc/systemd/echosleep.sh
Type=simple
Restart=on-success
...

Mein Skript hat dabei ein 'sleep 10' zur Verlangsamung.
Ansonsten müssen entsprechende timeout-Einstellungen getroffen werden, um ein Überfluten zu verhindern.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Re: Shellscript in Entlosschleife starten per Systemd

Beitrag von Richard » 21.12.2018 23:04:38

Das Script sieht so aus:

Code: Alles auswählen

inotifywait -mrq -e create --format %w%f /home/pi/folder / | while read FILE
do
 command
done
Es wartet halt bis in dem Ordner eine Datei erstellt wird und führt dann einen Befehl aus. Die Überwachung soll ja dauerhaft laufen. Bisher hatte ich sowas per Cron gestartet und wollte es nun einmal mit Systemd versuchen. Ich war eher verwundert, dass es geht obwohl das Script nicht als 'active' angezeigt wird.

Antworten