Teil eines Skript nur alle 7 Tage ausführen
Hallo,
ich habe ein Shellscript geschrieben, welches grob so aussieht:
Dieses Skript wird einmal früh morgens ausgeführt und beinhaltet ein WoL-Signal zum Starten und einen SSH-Befehl für poweroff. Also geht ein externer Linux Rechner damit an und wieder aus.
Nun möchte ich gerne vor dem Poweroff etwas nur alle 7 Tage anwerfen lassen. Wie bekomme ich das hin, dass ich einfach dieses Script verwenden kann, der den zweiten Teil, aber halt nur alle 7 Tage macht. Wegen dem Poweroff würde ich ja bei einem weiteren Script Gefahr laufen, dass der externe Rechner sich einfach schon abgeschaltet hat ...
ich habe ein Shellscript geschrieben, welches grob so aussieht:
etherwake XYZ
sleep 90
if ping -b -c 5 192.168.0.1
then
{
bla
bla
bla
ssh root@192.168.0.1 'poweroff'
}
else
{
bla
}
fi
Nun möchte ich gerne vor dem Poweroff etwas nur alle 7 Tage anwerfen lassen. Wie bekomme ich das hin, dass ich einfach dieses Script verwenden kann, der den zweiten Teil, aber halt nur alle 7 Tage macht. Wegen dem Poweroff würde ich ja bei einem weiteren Script Gefahr laufen, dass der externe Rechner sich einfach schon abgeschaltet hat ...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 293813
Url: https://administrator.de/contentid/293813
Ausgedruckt am: 19.11.2024 um 13:11 Uhr
7 Kommentare
Neuester Kommentar
Hallo, nabend.
Recht simpel wenn man hinterher mal drüber nach denkt ;)
Es sollte klar sein das man sich irgendwie merken muss vor wie vielen Durchläufen der Extrateil das letzte Mal ausgeführt wurde. Nehmen wir einfach eine Datei dazu.
Bei jedem Durchgang wir ein Punkt in die Datei gespeichert (ANGEHÄNGT!)
Nach 7 Durchläufen sind 7 Punkte in der Datei
~Arano
Recht simpel wenn man hinterher mal drüber nach denkt ;)
Es sollte klar sein das man sich irgendwie merken muss vor wie vielen Durchläufen der Extrateil das letzte Mal ausgeführt wurde. Nehmen wir einfach eine Datei dazu.
rem = "/path/erinnerung"
var = "'cat $rem'"
if [ $var = "......." ]
then
// leere erinnerung
echo "">$rem
// tu was immer du tun wilst
// todo
// todo
// todo
fi
// Punkt an datei ANHÄNGEN
echo "." >>$rem
Nach 7 Durchläufen sind 7 Punkte in der Datei
if( $var = "......." )
, dann führe Extra-Task aus und leere den Dateiinhalt - wir beginnen von vorn.~Arano
Hi.
Ähm... wegen den geschweiften Klammern die du da in deinem Code hast bin ich mir nicht sicher ! Aber grundsätzlich kann man Bedingungen und Schleifen ineinander verschachteln.
!! Und verwende NIEMALS Code aus dem Netz ohne ihn vorher verstanden und getestet zu haben !!
Try&Error
Probiere es aus, Script kopieren, Überschüssige Befehle entfernen, Infos per echo ausgeben lassen und GO ! Beim 7 Aufruf sollte dann das echo aus dem IF ausgegeben werden und beim 8 nicht mehr... bis zum 14,21,... dan gehts
~Arano
Ähm... wegen den geschweiften Klammern die du da in deinem Code hast bin ich mir nicht sicher ! Aber grundsätzlich kann man Bedingungen und Schleifen ineinander verschachteln.
!! Und verwende NIEMALS Code aus dem Netz ohne ihn vorher verstanden und getestet zu haben !!
Try&Error
Probiere es aus, Script kopieren, Überschüssige Befehle entfernen, Infos per echo ausgeben lassen und GO ! Beim 7 Aufruf sollte dann das echo aus dem IF ausgegeben werden und beim 8 nicht mehr... bis zum 14,21,... dan gehts
~Arano
Moin,
prüf doch einfach auf den Wochentag. Dann führst Du das poweroff nur an dem vorbestimmten Tag aus.
lks
Hint: "date +a"
Nachtrag
Wenn Du date +%s nimmst, kannst Du ohne mit ein wenig Mathematik sogar ersparen, in irgendwelchen Dateien Werte merken zu müssen, um das ganze in beliebigenIntervallen ausführen zu können.
prüf doch einfach auf den Wochentag. Dann führst Du das poweroff nur an dem vorbestimmten Tag aus.
lks
Hint: "date +a"
Nachtrag
Wenn Du date +%s nimmst, kannst Du ohne mit ein wenig Mathematik sogar ersparen, in irgendwelchen Dateien Werte merken zu müssen, um das ganze in beliebigenIntervallen ausführen zu können.
Hallo.
Naja, mein Fehler !
Ich hätte stat den einfachen Anführungszeichen Backticks verwenden müssen.
Und mit Lochkartenstanzer's Antwort hast du ja noch eine gute Möglichkeit, wenn nicht sogar die bessere für diese Anforderungen !?
~Arano
Die Abfrage mit cat funktioniert nicht.
Und wie ich diese Worte lese, geht mir das Problem auch schon durch den Kopf... wieso viel es mir nicht gleich beim schreiben auf...Naja, mein Fehler !
Ich hätte stat den einfachen Anführungszeichen Backticks verwenden müssen.
// falsch
var = "'cat $rem'"
// richtig
var = "`cat $rem`"
ein Punkt immer in einer neuen Zeile gemacht wird
auch das ist mein Fehler. Wir müssen echo
nur mitteilen das es keinen Zeilenumbruch erzeugen sollecho -n "." >>$rem
Und mit Lochkartenstanzer's Antwort hast du ja noch eine gute Möglichkeit, wenn nicht sogar die bessere für diese Anforderungen !?
~Arano
Zitat von @Arano:
Hallo.
Naja, mein Fehler !
Hallo.
Die Abfrage mit cat funktioniert nicht.
Und wie ich diese Worte lese, geht mir das Problem auch schon durch den Kopf... wieso viel es mir nicht gleich beim schreiben auf...Naja, mein Fehler !
Den aber jemand, der ein Skript anpaßt, hätte sehen müssen, spätestens dann, wenn es nicht funktioniert.
auch das ist mein Fehler. Wir müssen
echo
nur mitteilen das es keinen Zeilenumbruch erzeugen sollAuch das ist normalerweise mit ein bischen Manual-Lesen behebbar.
lks