gelöst: Crontab @reboot will nicht funktionieren

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Donnerkeil
Beiträge: 5
Registriert: 21.01.2024 08:58:13

gelöst: Crontab @reboot will nicht funktionieren

Beitrag von Donnerkeil » 21.01.2024 09:40:06

Hallo Leute,

habe folgendes Script verfasst (woran man meinen Anfängerstatus bestimmt sofort erkennen kann).

Code: Alles auswählen

#!/bin/bash
#rsync /home/chef/storage /home/chef/backup
#Ziellaufwerk noch gar nicht vorhanden, deswegen erstmal ausgeklammert

date "+%d.%m.%Y %T" > /home/chef/.local/logs/t630_systemupdate.log
echo -e "Beginn Datenspiegelung ...\n" >> /home/chef/.local/logs/t630_systemupdate.log

#rsync -a /home/chef/storage /home/chef/backup

if [ "$?" -eq "0" ]
then
    date "+%d.%m.%Y %T" >> /home/chef/.local/logs/t630_systemupdate.log
    echo -e "Datenspiegelung ohne Feler beendet\n" >> /home/chef/.local/logs/t630_systemupdate.log
    df -h /home/chef/storage  >> /home/chef/.local/logs/t630_systemupdate.log

else
    date "+%d.%m.%Y %T" >> /home/chef/.local/logs/t630_systemupdate.log
    echo -e "Datenspiegelung gescheitert\n" >> /home/chef/.local/logs/t630_systemupdate.log
    df -h /home/chef/storage  >> /home/chef/.local/logs/t630_systemupdate.log
fi

echo "*** Ende der Durchsage ***" >> /home/chef/.local/logs/t630_systemupdate.log

mail -s "Systemmeldung" email@adresse.org < /home/chef/.local/logs/t630_systemupdate.log

Das Script ist ausführbar und funktioniert, wenn ich es als User aufrufe. Die Meldung wird per Email versendet. Jetzt wollte ich das in Crontab eintragen, um es bei jedem Reboot laufen zu lassen. Also:

Code: Alles auswählen

crontab -e
und Eintrag

Code: Alles auswählen

@reboot /home/chef/.local/scripts/report.sh
Das Script erzeugt die neue Log-Datei, jedoch findet der Email-Versand (hatte dazu msmtp installiert) nicht statt. Kann es sein, dass das Script für msmpt zu früh ausgeführt wird?
Zuletzt geändert von Donnerkeil am 23.01.2024 19:37:39, insgesamt 1-mal geändert.

tobo
Beiträge: 1996
Registriert: 10.12.2008 10:51:41

Re: Crontab @reboot will nicht funktionieren

Beitrag von tobo » 21.01.2024 10:04:17

Donnerkeil hat geschrieben: ↑ zum Beitrag ↑
21.01.2024 09:40:06
Das Script erzeugt die neue Log-Datei, jedoch findet der Email-Versand (hatte dazu msmtp installiert) nicht statt. Kann es sein, dass das Script für msmpt zu früh ausgeführt wird?
Das kann gut sein!? Jedenfalls sollte dadurch dann aber eine Systemmail eingegangen sein. Du könntest ein `sleep Xs' zu Beginn des Skripts oder auch in der Crontab-Zeile verzögernd einfügen. mail ist kein alias?
Zuletzt geändert von tobo am 21.01.2024 10:18:57, insgesamt 1-mal geändert.

mat6937
Beiträge: 2953
Registriert: 09.12.2014 10:44:00

Re: Crontab @reboot will nicht funktionieren

Beitrag von mat6937 » 21.01.2024 10:18:42

Donnerkeil hat geschrieben: ↑ zum Beitrag ↑
21.01.2024 09:40:06
Kann es sein, dass das Script für msmpt zu früh ausgeführt wird?
Alternativ zu sleep könntest Du auch at im cronjob (mit @reboot) benutzen und das Script dann +1 oder +2 Minute(n) nach dem Zeitpunkt des @reboot, (nur einmal) ausführen lassen.
Oder Du lässt das Script mit Hilfe einer (nicht aktivierten) service-unit ausführen und diese service-unit mit Hilfe einer timer-unit, z. B. 30 Sekunden nach dem aktiv werden der timer-unit, ausführen. Die timer-unit wird immer nach dem booten aktiv.
In der service-unit kannst Du gezielt Abhängigkeiten definieren. Ich benutze z. B. immer:

Code: Alles auswählen

After=systemd-time-wait-sync.service
Requires=systemd-time-wait-sync.service
, weil die Zeit "sofort" nach dem booten aus dem Internet (vom Zeitserver) erfolgreich geholt wird und somit immer sichergestellt ist, dass zum Zeitpunkt der Ausführung der service-unit _immer_ schon Internetzugang vorhanden ist.

EDIT:

Code: Alles auswählen

apt policy at
systemctl status atd
man atd

Code: Alles auswählen

@reboot	(<user>)	echo "<absoluter-Pfad>/<Script>" | at now +2 minutes
(user ohne runde und ohne spitze Klammern nur in der systemweiten crontab benutzen)
Syntax für at beachten.

Donnerkeil
Beiträge: 5
Registriert: 21.01.2024 08:58:13

Re: gelöst: Crontab @reboot will nicht funktionieren

Beitrag von Donnerkeil » 23.01.2024 19:39:32

Hallo @ all

Besten Dank für Eure Unterstützung! Mit "Sleep 20 &&" im Crontab funzt es tatsächlich schon. Werde das vorsichtshalber mit Sleep 30 dauerhaft einstellen, den Luxus gönn' ich mir!

Antworten