Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.
Script zum Rechner herunterfahren
Moderator: Moderatoren
-
- Newbie
- Beiträge: 40
- Registriert: 15. Sep 2004, 16:00
Script zum Rechner herunterfahren
Hallo
Ich habe einen Rechner am laufen, der nach einer einstellbaren Zeit sich abschalten soll. Dazu möchte ich eine Liste von Ports eintragen und eine Zeit festlegen können, nachder der Rechner bei Inaktivität dieser Ports sich herunter fährt. Gibt es da unter Suse 9.0 vielleicht ein Programm mit dem ich soetwas bewältigen könnte, bzw hat jemand mit soetwas bereits Erfahrungen gesammelt von denen es zu berichten gibt?
Wenn ich mehr Ahnung hätte, würde ich ja ein Programm schreiben, aber mein Horizont in Sachen Linux ist noch ein wenig begrenzt. Kann nur was in Sachen C aufweisen.
Ich habe einen Rechner am laufen, der nach einer einstellbaren Zeit sich abschalten soll. Dazu möchte ich eine Liste von Ports eintragen und eine Zeit festlegen können, nachder der Rechner bei Inaktivität dieser Ports sich herunter fährt. Gibt es da unter Suse 9.0 vielleicht ein Programm mit dem ich soetwas bewältigen könnte, bzw hat jemand mit soetwas bereits Erfahrungen gesammelt von denen es zu berichten gibt?
Wenn ich mehr Ahnung hätte, würde ich ja ein Programm schreiben, aber mein Horizont in Sachen Linux ist noch ein wenig begrenzt. Kann nur was in Sachen C aufweisen.
Hallo,
der Beitrag ist schon ein wenig älter und bislang hat noch keinen geantwortet.
Ich werde Dir vielleicht einige Tipps geben können, wie ich es machen würde. Habe aber leider das Problem, dass ich mit Korn-Shell auf einem Solarissystem arbeitet. Deshalb könnten die Ergebnisse im Linux ein wenig anders aussehen und Du mußt es Dir weiter zusammenreimen.
Ich denke, dass es unter Linux auch den Befehl netstat - a geben wird. Wenn ich nun den Befehl eingeben bekomme ein Ergebis das wie folgt aussieht:
Alternativ könnte ich nun auch eine Portnummer angeben z.B. 6666
Dann könnte ein Erbegniss wie folgt aussehen:
Jetzt vielleicht noch einwenig verfeinern
wobei D4865026 gerade mein Rechnername ist und Du natürlich Deinen Rechnernamen einbauen solltest.
Nun sollten wir das von Dir gewünschte Ergebnis haben.
Ist kein Port offen, bekommst Du kein Ergebnis angezeigt und netstat gibt einen Fehlercode 1 zurück, der abgefangen und weiter verwertet werden kann.
Kommt der Fehlercode 1 kannst Du mit einem sleep-Befehl eine gewisse Anzahl von Sekunden warten und - so zumindest unter Solaris - mit init 5 das System herunterfahren. Bei Linux wird es wahrscheinlich systemhalt oder ähnliches sein.
Jetzt das ganze in einem schönen Skript packen und es sollte funktionieren? Vielleicht!
Ein kleines Skriptbeispiel unter ksh und solaris 8:
Hoffe, dass ich Dir helfen konnte oder die Frage richtig verstanden hatte. Es handelt sich hierbei allerdings um ein sehr vereinfachtes Skript. Würde es so meinen Auftraggebern aber niemals überreichen. Läßt sich noch deutlich weiter entwickeln und verfeiner oder haber komplett andere Lösungen.
Gruß
David
der Beitrag ist schon ein wenig älter und bislang hat noch keinen geantwortet.
Ich werde Dir vielleicht einige Tipps geben können, wie ich es machen würde. Habe aber leider das Problem, dass ich mit Korn-Shell auf einem Solarissystem arbeitet. Deshalb könnten die Ergebnisse im Linux ein wenig anders aussehen und Du mußt es Dir weiter zusammenreimen.
Ich denke, dass es unter Linux auch den Befehl netstat - a geben wird. Wenn ich nun den Befehl
Code: Alles auswählen
netstat -a | grep ftp
Code: Alles auswählen
D4865026.ftp 10.96.18.2.1042 32249 0 24820 0 ESTABLISHED
D4865026.ftp-data 10.96.18.2.1045 32768 0 26280 0 ESTABLISHED
Code: Alles auswählen
netstat -a | grep 6666
Code: Alles auswählen
D4865026.6666 10.67.41.15.1038 32583 0 24820 0 CLOSING
Code: Alles auswählen
netstat -a | grep '^D4865026.6666'
Nun sollten wir das von Dir gewünschte Ergebnis haben.
Ist kein Port offen, bekommst Du kein Ergebnis angezeigt und netstat gibt einen Fehlercode 1 zurück, der abgefangen und weiter verwertet werden kann.
Kommt der Fehlercode 1 kannst Du mit einem sleep-Befehl eine gewisse Anzahl von Sekunden warten und - so zumindest unter Solaris - mit init 5 das System herunterfahren. Bei Linux wird es wahrscheinlich systemhalt oder ähnliches sein.
Jetzt das ganze in einem schönen Skript packen und es sollte funktionieren? Vielleicht!

Ein kleines Skriptbeispiel unter ksh und solaris 8:
Code: Alles auswählen
while TRUE
do
netstat -a | grep '^D4865026.6666' > /dev/null
if [[ $? -eq 1 ]]
then
sleep 600 && init 5
fi
sleep 60
done
Gruß
David
-
- Newbie
- Beiträge: 40
- Registriert: 15. Sep 2004, 16:00
hallo david
vielen dank für deine mühe. das sieht schonmal sehr gut aus, aber ich hab schon ein problem
mein samba läuft eigentlich sehr gut aber ich kann die ports mit netstat -a | grep tcp einfach nicht finden. eigentlich sollte er tcp 139 haben, aber da ist nichts!?
hast du dafür eine erklärung??
vielen dank für deine mühe. das sieht schonmal sehr gut aus, aber ich hab schon ein problem
mein samba läuft eigentlich sehr gut aber ich kann die ports mit netstat -a | grep tcp einfach nicht finden. eigentlich sollte er tcp 139 haben, aber da ist nichts!?
hast du dafür eine erklärung??
-
- Newbie
- Beiträge: 40
- Registriert: 15. Sep 2004, 16:00
möchte gar nicht erst suchen wie oft das hier im Club schon in irgendwelchen Beiträgen steht, also noch mal.
Dateiname nach deinem Geschnack wählen. zB. no_samba_then_out.sh
In erste Zeile Programm das dein Script ausführen soll in folgender Form #! /path/program also in deinem Fall
Wenn du einen Kommentar einfügen willst dann das erste Zeichen in der Zeile #
Dann deine Befehle reinschreiben, genau so und in der Reihenfolge als wenn du sie per Hand in der bash eingeben würdest.
Datei speichern.
Danach überlegen, wem soll Datei gehören, in welchem Verzeichniss soll sie stehen und wer soll sie lesen, ändern und ausführen dürfen.
man cd oder man mv ---> helfen dir die Datei dort hin zu bekommen.
man chown und man chgrp ---> helfen dir die Eigentumsrechte zu klären
man chmod ----> hilft dir die Zugriffs und Ausführungsrechte zu setzen.
Script testen --> cd /verzeichnis ; ./program oder
/verzeichnis/program oder
crontab -e (crontabeintrag vornehmen); speichern; warten bis die Zeit reif ist.
robi
Dateiname nach deinem Geschnack wählen. zB. no_samba_then_out.sh
In erste Zeile Programm das dein Script ausführen soll in folgender Form #! /path/program also in deinem Fall
Code: Alles auswählen
#!/bin/bash
Code: Alles auswählen
# Das hier ist ein Kommentar
# und das hier auch noch
Datei speichern.
Danach überlegen, wem soll Datei gehören, in welchem Verzeichniss soll sie stehen und wer soll sie lesen, ändern und ausführen dürfen.
man cd oder man mv ---> helfen dir die Datei dort hin zu bekommen.
man chown und man chgrp ---> helfen dir die Eigentumsrechte zu klären
man chmod ----> hilft dir die Zugriffs und Ausführungsrechte zu setzen.
Script testen --> cd /verzeichnis ; ./program oder
/verzeichnis/program oder
crontab -e (crontabeintrag vornehmen); speichern; warten bis die Zeit reif ist.
robi
-
- Newbie
- Beiträge: 40
- Registriert: 15. Sep 2004, 16:00
-
- Newbie
- Beiträge: 40
- Registriert: 15. Sep 2004, 16:00
Es gibt da ein Problem...
mit dem Code...
Ich bekomme folgenden Fehler:
bei diesem Script:
Ich schätze da muss was anderes rein??
mit dem Code...
Ich bekomme folgenden Fehler:
Code: Alles auswählen
./Shutdown.sh : Line 3: TRUE: command not found
Code: Alles auswählen
#!/bin/bash
while TRUE
do
netstat -an | grep 192.168.1.111:139 > /dev/null
if [[ $? -eq 1 ]]
then
sleep 600 && shutdown
fi
sleep 60
done
Dein Script kann mit TRUE nichts anfangen, es gibt weder eine Variable TRUE noch ein Programm oder FILE namens TRUE.
Ich glaube da musst du dir noch ein paar Gedanken machen,auch was zum Beispiel passiert wenn gerade mal keine Verbindung da war aber während das sleep 600 läuft hat sich wieder einer angemeldet.????
robi
Ich glaube da musst du dir noch ein paar Gedanken machen,auch was zum Beispiel passiert wenn gerade mal keine Verbindung da war aber während das sleep 600 läuft hat sich wieder einer angemeldet.????
robi
-
- Newbie
- Beiträge: 40
- Registriert: 15. Sep 2004, 16:00
-
- Newbie
- Beiträge: 40
- Registriert: 15. Sep 2004, 16:00
Ich mir jetzt hier mal was zusammengebastelt. Manch einer wird nur die AUgen verdrehen, aber ich denke dass es ein guter Anfang ist:
Nur das mit der for-Schleife geht noch nicht. Es soll einfach eine Endlosschleife sein. Hat da jemand eine Idee?
Code: Alles auswählen
#!/bin/bash
i=1
for i=1
do
if (netstat -an | grep 192.168.1.111:139)
then
count = 0
else count = count + 1
if (count = 10)
then shutdown -h now
fi
fi
sleep 6
done
schau mal ob sowas hier läuft, hab grad kein UNIX zur Hand zum testen
robi
Code: Alles auswählen
#!/bin/bash
typeset -i i
i=0
while [ $i -lt 10 ]
do
if [ $(netstat -an | grep 192.168.1.111:139 | wc -l ) -lt 1 ]
then
i=0
else
i=$i+1
fi
sleep 60
done
shutdown -h now
-
- Newbie
- Beiträge: 40
- Registriert: 15. Sep 2004, 16:00
C kennst du ja, also hier könnten es die selben Fehler sein, nicht geschlossene Schleifen, Klammern oder offene Hochkomma, hier kommt nur noch unabgeschlossene Kommandos dazu. Aber nicht in dem Script dass ich gepostet habe. Was da falsch ist, ist die IF-Verzeigung, die ist verkehrt rum. Ändere -lt in -ge und dann stimmts.
robi
robi
-
- Newbie
- Beiträge: 40
- Registriert: 15. Sep 2004, 16:00
Ich habe es geändert, aber es hilf nichts. Ich habe mal ein bisschen mit dem Auskommentieren ausprobiert und festgestellt, dass der Fehler bereits kommt wenn nur die while Schleife aktiv ist, also schon bei:
KLammern und den Kram hatte ich ja bereits kontrolliert. Ich schätze mal, dass das ein Problem mit dem while Syntax ist. Und da kenne ich mich leider in dieser Sprache nicht mit aus.
Code: Alles auswählen
#!/bin/bash
typeset -i i
i=0
while [ $i -lt 10 ]
do
done
wie wäre es mal, wenn du in die Schleife nen Befehl schreibst.
robi
Code: Alles auswählen
#!/bin/bash
typeset -i i
i=0
while [ $i -lt 10 ]
do
i=$i+1
echo $i
done
-
- Newbie
- Beiträge: 40
- Registriert: 15. Sep 2004, 16:00
-
- Newbie
- Beiträge: 40
- Registriert: 15. Sep 2004, 16:00