traller
Goto Top

Teil eines Skript nur alle 7 Tage ausführen

Hallo,
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
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 ...

Content-ID: 293813

Url: https://administrator.de/contentid/293813

Ausgedruckt am: 19.11.2024 um 13:11 Uhr

Arano
Arano 21.01.2016 aktualisiert um 21:14:12 Uhr
Goto Top
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.

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  
Bei jedem Durchgang wir ein Punkt in die Datei gespeichert (ANGEHÄNGT!)
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
traller
traller 21.01.2016 aktualisiert um 21:44:09 Uhr
Goto Top
Zitat von @Arano:

Hallo, nabend.




Also dann würde folgendes laufen? oder stört das 2x "fi"???
etherwake XYZ
sleep 90
if ping -b -c 5 192.168.0.1
then
{
bla
bla
bla
echo "." >>$rem  
if [ $var = "......." ]  
then
   {
 // leere erinnerung
    echo ""> $rem  
    // tu was immer du tun wilst
    // todo
    // todo
    // todo
}
fi
ssh root@192.168.0.1 'poweroff'  
}
else
{ 
bla
}
fi
Die beiden neuen Variablen hab ich vor alle if-Schleifen gepackt, wo auch noch andere sind ...
Arano
Arano 21.01.2016 um 21:55:46 Uhr
Goto Top
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 face-wink


~Arano
traller
traller 21.01.2016 um 22:47:27 Uhr
Goto Top
Zitat von @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 face-wink


~Arano

Die Abfrage mit cat funktioniert nicht. Ich würde auf grep ausweichen wollen. nun habe ich das Problem, dass mit
echo "." >> $rem   
ein Punkt immer in einer neuen Zeile gemacht wird. Wie bekomme ich es nun hin, dass entweder beim Hinzufügen des "." keine neue Zeile entsteht oder ich mit grep nach ".neueZeile.neueZeile." suchen kann?
Lochkartenstanzer
Lochkartenstanzer 22.01.2016 aktualisiert um 08:54:03 Uhr
Goto Top
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.
Arano
Arano 22.01.2016 um 18:49:44 Uhr
Goto Top
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 !
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 soll
echo -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
Lochkartenstanzer
Lochkartenstanzer 22.01.2016 um 18:55:56 Uhr
Goto Top
Zitat von @Arano:

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 soll

Auch das ist normalerweise mit ein bischen Manual-Lesen behebbar.

lks