Script das sich zeitlich wiederholt
-
- Beiträge: 43
- Registriert: 16.03.2010 10:52:39
Script das sich zeitlich wiederholt
Hallo
Ich bin im Besitz einer Linkstation duo.
Sie besitzt die Funktion wakeof.
Habe jetzt im Internet den Befehl "wakeonlan" fürs Terminal gefunden.
Damit lest sich de Linkstation übers lan starten, allerdings hat die Sache einen haken, ich müßte alle 4 min diesen Befehl wiederholen damit sich die Linkstation nicht abschaltet.
Da her habe ich mich gefragt, ob man das nicht mit einem Script lösen kann.
Ich bin im Besitz einer Linkstation duo.
Sie besitzt die Funktion wakeof.
Habe jetzt im Internet den Befehl "wakeonlan" fürs Terminal gefunden.
Damit lest sich de Linkstation übers lan starten, allerdings hat die Sache einen haken, ich müßte alle 4 min diesen Befehl wiederholen damit sich die Linkstation nicht abschaltet.
Da her habe ich mich gefragt, ob man das nicht mit einem Script lösen kann.
Re: Script das sich zeitlich wiederholt
Endlosschleifen und man sleep sind deine Freunde.
Re: Script das sich zeitlich wiederholt
wie waer es mit einem cron job?
Roland
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
-
- Beiträge: 43
- Registriert: 16.03.2010 10:52:39
Re: Script das sich zeitlich wiederholt
über endlosschleifen habe ich auch drüber nachgedacht, nur ich ken mich mit scripte schreiben nicht aus.
Were dankbar über ein beispiel.
Solte sich auch wieder beenden lassen, und nicht durch einen neustart.
Were dankbar über ein beispiel.
Solte sich auch wieder beenden lassen, und nicht durch einen neustart.
Re: Script das sich zeitlich wiederholt
Bash:masterspoon hat geschrieben:über endlosschleifen habe ich auch drüber nachgedacht, nur ich ken mich mit scripte schreiben nicht aus.
Were dankbar über ein beispiel.
Code: Alles auswählen
while [ true ]
do
mach_was_du_willst
dome
"das schöne an einer Endlosschleife ist, das sie keine Fehlermeldung erzeugt"masterspoon hat geschrieben:Solte sich auch wieder beenden lassen, und nicht durch einen neustart.
Mit einem kill kannst du sie beenden, aber das wiederspricht sich irgendwie. Entweder willst du eine Endlosschleife, oder nicht. Vielleicht solltest du dir das besser vorher ueberlegen.
Roland
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
Re: Script das sich zeitlich wiederholt
Vielleicht etwas eleganter:
So kannst du mit dem Vorhandensein einer externen Datei (hier "run" im Home des Scriptstarters) das Script steuern. Solange die Datei vorhanden ist, läuft es, löschst du sie, stoppt es. Zwischen den Schleifendurchgängen wartet das Script jeweils 5 Sekunden.
Die Cron-Lösung halte ich trotzdem für die sauberere Lösung, sofern du nicht verschiedene Systeme zum Absetzen des WOL-Signals verwenden willst.
Code: Alles auswählen
#!/bin/bash
while [ -f ~/run ]
do
mach_was_du_willst
sleep 5
done
echo 'exiting: no file `run` found.\n'
Die Cron-Lösung halte ich trotzdem für die sauberere Lösung, sofern du nicht verschiedene Systeme zum Absetzen des WOL-Signals verwenden willst.
Zuletzt geändert von hikaru am 26.10.2010 12:08:02, insgesamt 1-mal geändert.
Re: Script das sich zeitlich wiederholt
bei "dome" bin ich mir nicht so sicher...roli hat geschrieben:"das schöne an einer Endlosschleife ist, das sie keine Fehlermeldung erzeugt"
Re: Script das sich zeitlich wiederholt
Hi,
waere richtig
da bin ich mir schon sicher, das gibt eine Fehlermeldung , ist aber andererseits auch keine Endlosschleifeub13 hat geschrieben:bei "dome" bin ich mir nicht so sicher...roli hat geschrieben:"das schöne an einer Endlosschleife ist, das sie keine Fehlermeldung erzeugt"
Code: Alles auswählen
done
Roland
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
Re: Script das sich zeitlich wiederholt
Alternativ, schreib ein Skript das sich selbst wieder aufruft:
Aufruf mit:
Das Skript Endlos.sh selbst:
Aufruf mit:
Code: Alles auswählen
/Pfad/zum/Skript/Endlos.sh
Code: Alles auswählen
#!/bin/bash
wakeonlan
sleep 4m
/Pfad/zum/Skript/Endlos.sh &
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!
Macht ohne Haftung funktioniert nicht!
Re: Script das sich zeitlich wiederholt
Hier würde nach drei Monaten der Kernel kollabieren, weil sich dieser eine Prozess 32767 mal wieder selbst aufgerufen hat.detix hat geschrieben:Alternativ, schreib ein Skript das sich selbst wieder aufruft:
Aufruf mit:Das Skript Endlos.sh selbst:Code: Alles auswählen
/Pfad/zum/Skript/Endlos.sh
Code: Alles auswählen
#!/bin/bash wakeonlan sleep 4m /Pfad/zum/Skript/Endlos.sh &
Re: Script das sich zeitlich wiederholt
Verdient sowas noch die Bezeichnung Fork"bombe"?Tintom hat geschrieben:Hier würde nach drei Monaten der Kernel kollabieren, weil sich dieser eine Prozess 32767 mal wieder selbst aufgerufen hat.
- bmario
- Beiträge: 1257
- Registriert: 05.09.2007 12:15:47
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Dresden
Re: Script das sich zeitlich wiederholt
Vielleicht Forkzeitbombehikaru hat geschrieben:Verdient sowas noch die Bezeichnung Fork"bombe"?Tintom hat geschrieben:Hier würde nach drei Monaten der Kernel kollabieren, weil sich dieser eine Prozess 32767 mal wieder selbst aufgerufen hat.
Nichts zu tun ist viel besser,
als mit viel Mühe nichts zu schaffen. - Laotse
als mit viel Mühe nichts zu schaffen. - Laotse
-
- Beiträge: 43
- Registriert: 16.03.2010 10:52:39
Re: Script das sich zeitlich wiederholt
Ich versuche es noch mal konkreter zu schildern.
1. Die Linkstation wird beim ersten wakeonlan gestartet, aller dings erwartet sie ale 4 oder 5 min das der Befehl wiederholt wird ansonsten schaltet sie sich ich ab.
Da ich nicht weis wie sich die sache auf mein netzwerk wie auch auf meinen Laptop leistungstechnisch auswirkt, möchte ich das der befehl auch nuhr alle 4 min ausgeführt wird und nicht dauerhaft.
2. Warum ich das Script beenden möchte liegt daran, wen ich weiter an meinem Laptop arbeite aber die Linkstation nicht mehr benötige soll sie sich ja abschalten.
Was nicht möglich wehre wen das Script endlos läuft.
Jetzt mal eine ferstendnis Frage zum Script
#!/bin/bash
while [ -f ~/run ] //Was bedeutet das in den eckigen klammern?
do
wakeonlan mac_adresse
sleep 5 //damit sage ich das die schleife sich alle 5 minuten wiederholen soll?
done
die schleife wird dan im Terminal ausgeführt und wen ich das Terminal schließe wird das Script beendet sehe ich das so richtig?
1. Die Linkstation wird beim ersten wakeonlan gestartet, aller dings erwartet sie ale 4 oder 5 min das der Befehl wiederholt wird ansonsten schaltet sie sich ich ab.
Da ich nicht weis wie sich die sache auf mein netzwerk wie auch auf meinen Laptop leistungstechnisch auswirkt, möchte ich das der befehl auch nuhr alle 4 min ausgeführt wird und nicht dauerhaft.
2. Warum ich das Script beenden möchte liegt daran, wen ich weiter an meinem Laptop arbeite aber die Linkstation nicht mehr benötige soll sie sich ja abschalten.
Was nicht möglich wehre wen das Script endlos läuft.
Jetzt mal eine ferstendnis Frage zum Script
#!/bin/bash
while [ -f ~/run ] //Was bedeutet das in den eckigen klammern?
do
wakeonlan mac_adresse
sleep 5 //damit sage ich das die schleife sich alle 5 minuten wiederholen soll?
done
die schleife wird dan im Terminal ausgeführt und wen ich das Terminal schließe wird das Script beendet sehe ich das so richtig?
Re: Script das sich zeitlich wiederholt
Die eckigen Klammer sind ein Synonym für test. Hier im konkreten Fall wird überprüft, ob die Datei ~/run existiert, falls nicht, wird die while-Schleife verlassen. Mehr Infos in bzw. unter "CONDITIONAL EXPRESSIONS".
führt zu einer Pause von 5 Sekunden, für 5 Minuten. Auch hier mehr Infos mit
Code: Alles auswählen
man test
Code: Alles auswählen
man bash
Code: Alles auswählen
sleep 5
Code: Alles auswählen
sleep 5m
Code: Alles auswählen
man sleep
MfG GoKi
:wq
:wq
-
- Beiträge: 43
- Registriert: 16.03.2010 10:52:39
Re: Script das sich zeitlich wiederholt
So habe d folgendes script jetzt erstellt und getestet
#!/bin/bash
sleep5
while [ true ]
do
wakeonlan
sleep 4m
done
Das funktioniert jetzt so wie ich es wollte, nur wen ich das script starte werde ich immer gefragt ob ich das script im Terminal, Anzeigen oder Ausführen möchte.
Gibt es nicht eine Möglichkeit das es ohne nachfrage im Terminal ausgeführt wird.
#!/bin/bash
sleep5
while [ true ]
do
wakeonlan
sleep 4m
done
Das funktioniert jetzt so wie ich es wollte, nur wen ich das script starte werde ich immer gefragt ob ich das script im Terminal, Anzeigen oder Ausführen möchte.
Gibt es nicht eine Möglichkeit das es ohne nachfrage im Terminal ausgeführt wird.
Re: Script das sich zeitlich wiederholt
Erklärung bitte, warum sollte er das tun?Tintom hat geschrieben:Hier würde nach drei Monaten der Kernel kollabieren, weil sich dieser eine Prozess 32767 mal wieder selbst aufgerufen hat.
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!
Macht ohne Haftung funktioniert nicht!
Re: Script das sich zeitlich wiederholt
Ja:masterspoon hat geschrieben: Gibt es nicht eine Möglichkeit das es ohne nachfrage im Terminal ausgeführt wird.
roli hat geschrieben: wie waer es mit einem cron job?
Re: Script das sich zeitlich wiederholt
Die Datei /proc/sys/kernel/pid_max legt die maximale Anzahl von Prozess-IDs fest. Standard ist hier 32768 (sieht man auch, wenn man ein cat auf die Datei abfeuert). Wenn du nun Dein Skript aufrufst, geht eine Prozess-ID drauf. Da dieses Skript sich alle vier Minuten wieder selbst aufruft und nichts geschlossen wird, hast du alle vier Minuten eine Prozess-ID weniger zu Verfügung.detix hat geschrieben:Erklärung bitte, warum sollte er das tun?Tintom hat geschrieben:Hier würde nach drei Monaten der Kernel kollabieren, weil sich dieser eine Prozess 32767 mal wieder selbst aufgerufen hat.
Nun einfach ausrechnen 32768/((24*60)/4)=91,02 Tage. Aber selbst der Wert stimmt nicht, du hast ja noch andere Prozesse laufen, daher geht der Kernel schon früher hopps.
Gruß
Re: Script das sich zeitlich wiederholt
Also das der Kernel dabei "hopps" geht, kann ich mir beim besten Willen nicht vorstellen!
Process identifier
Mein Englisch ist zwar schlecht, aber:
Das schreit ja förmlich nach einem Selbsttest,
ein passendes Skript das nach ein paar Stunden ein Ergebnis bringt werd ich am Wochende mal testen,
dieses säh dann so aus:
mal sehn, ob Linux dadurch unbedienbar wird...
Process identifier
Mein Englisch ist zwar schlecht, aber:
lässt auch nach meinem Verständnis keine höheren PIDs zu, nach Erreichen des Limits gehts dann aber wieder von vorn los.Under Unix, process IDs are usually allocated on a sequential basis, beginning at 0 and rising to a maximum value which varies from system to system. Once this limit is reached, allocation restarts at zero and again increases.
Das schreit ja förmlich nach einem Selbsttest,
ein passendes Skript das nach ein paar Stunden ein Ergebnis bringt werd ich am Wochende mal testen,
dieses säh dann so aus:
Code: Alles auswählen
#!/bin/bash
date
sleep 1
/Pfad/zum/Skript/Endlos.sh &
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!
Macht ohne Haftung funktioniert nicht!
Re: Script das sich zeitlich wiederholt
Das sleep5 am Anfang kannst du dir sparen. Ich staune dass das ohne Leerzeichen überhaupt läuft.masterspoon hat geschrieben:So habe d folgendes script jetzt erstellt und getestet
#!/bin/bash
sleep5
while [ true ]
do
wakeonlan
sleep 4m
done
Startest du das etwa aus einer GUI-Anwendung heraus?masterspoon hat geschrieben:Das funktioniert jetzt so wie ich es wollte, nur wen ich das script starte werde ich immer gefragt ob ich das script im Terminal, Anzeigen oder Ausführen möchte.
masterspoon hat geschrieben:Gibt es nicht eine Möglichkeit das es ohne nachfrage im Terminal ausgeführt wird.
Code: Alles auswählen
chmod u+x deinscript
Prinzipiell stimmt das. Aber das geht natürlich nur, wenn die unteren PIDs wieder frei sind. In deinem Beispiel werden sie aber weiterhin von den nicht geschlosenen früheren Instanzen belegt.detix hat geschrieben:Also das der Kernel dabei "hopps" geht, kann ich mir beim besten Willen nicht vorstellen!
Process identifier
Mein Englisch ist zwar schlecht, aber:lässt auch nach meinem Verständnis keine höheren PIDs zu, nach Erreichen des Limits gehts dann aber wieder von vorn los.Under Unix, process IDs are usually allocated on a sequential basis, beginning at 0 and rising to a maximum value which varies from system to system. Once this limit is reached, allocation restarts at zero and again increases.
Das sleep 1 kannst du dir auch sparen. Wenn du dann zusätzlich noch eine iterative Endlosschleife einbaust schaffst du es nicht mal mehr dir einen Kaffee zu machen bevor das System nicht mehr reagiert.detix hat geschrieben:Das schreit ja förmlich nach einem Selbsttest,
ein passendes Skript das nach ein paar Stunden ein Ergebnis bringt werd ich am Wochende mal testen,
dieses säh dann so aus:mal sehn, ob Linux dadurch unbedienbar wird...Code: Alles auswählen
#!/bin/bash date sleep 1 /Pfad/zum/Skript/Endlos.sh &
Re: Script das sich zeitlich wiederholt
Nein, denn das Skript beendet sich nach dem Aufruf wieder. Es wartet nicht, bis der gestartete Prozess beendet wird. Man beachte das &-Zeichen am Ende:hikaru hat geschrieben:Aber das geht natürlich nur, wenn die unteren PIDs wieder frei sind. In deinem Beispiel werden sie aber weiterhin von den nicht geschlosenen früheren Instanzen belegt.
EDIT: Ich hab gerade den Test gemacht (ohne sleep 1). Der Kernel hat wirklich nach einer PID von ca. 32.000 wieder von vorne angefangen.detix hat geschrieben:Code: Alles auswählen
#!/bin/bash date sleep 1 /Pfad/zum/Skript/Endlos.sh &
Re: Script das sich zeitlich wiederholt
Gute Idee, hab das 'sleep1' entfernt, so dauert ein Durchlauf hier knapp 1min40sek,hikaru hat geschrieben:Das sleep 1 kannst du dir auch sparen. Wenn du dann zusätzlich noch eine iterative Endlosschleife einbaust schaffst du es nicht mal mehr dir einen Kaffee zu machen bevor das System nicht mehr reagiert.
ich weiß nicht wieviel Durchläufe jetzt gemacht sind (es läuft und überläuft noch immer),
Kernelbelastung ist 100%, von einem Ausstieg aber keine Spur!
Im Gegenteil, iceweasel beendet und neugestartet, auch mal eben openoffice gestartet,
hier hängt nichts und das Skript läuft munter weiter, alles Andere wäre auch traurig gewesen...
Soviel zur Fork"bombe"
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!
Macht ohne Haftung funktioniert nicht!
Re: Script das sich zeitlich wiederholt
Japp, übersehen.lhfloss hat geschrieben:Nein, denn das Skript beendet sich nach dem Aufruf wieder. Es wartet nicht, bis der gestartete Prozess beendet wird. Man beachte das &-Zeichen am Ende:hikaru hat geschrieben:Aber das geht natürlich nur, wenn die unteren PIDs wieder frei sind. In deinem Beispiel werden sie aber weiterhin von den nicht geschlosenen früheren Instanzen belegt.