automatische Clientabfrage

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
snowball3rd
Beiträge: 21
Registriert: 17.02.2013 13:07:34

automatische Clientabfrage

Beitrag von snowball3rd » 08.09.2013 15:49:57

Hallo,

ich bin absolut neu hier und versuche mich aktuell an der Erstellung eines Datengrabs mit Hilfe von Debian.

Debian 6 ist installiert, SSH und Mediatomb ebenso. Soweit funktioniert alles wie ich es möchte.
Ich kann auf meine Musik und Videos zugreifen.

Jetzt möchte ich aber nicht immer wieder in der HWR gehen und den Server wieder ausmachen. Gerade dann nicht, wenn ich keinen Monitor und Tastatur angeschossen habe. (Werkel eigentlich ohne grafische Oberfläche rum, sondern nur über die Console).

Ich hab auch schon ein Skrict gefunden, mit dem ich gezieht nach IP-Adressen in meinem Netzwerk suchen kann und wenn diese nicht mehr antworten, fährt der Server runter.

Code: Alles auswählen

#!/bin/bash

echo "Starting autoshutdown.sh ..."

# Liste der zu überwachenden Computer
IP1=x.x.x.1
IP2=x.x.x.2
IP3=x.x.x.3

if (ping -c 3 $IP1 || ping -c 3 $IP2 || ping -c 3 $IP3 ||\
    (echo "90 Sekunden Tiefschlaf"; sleep 90; ping -c 3 $IP1) || ping -c 3 $IP2 || ping -c 3 $IP3)
then
    echo "Mindestens 1 Client am Netz. "
else
    echo "Alle Clients offline, Server wird heruntergefahren. "
    # Eintrag ins Logfile
    echo "Alle Clients offline, Server wird heruntergefahren. " | logger -i -t autoshutdown.sh
    shutdown -h 1
fi

echo "Ende von autoshutdown.sh ..."

exit 0
Funktioniert soweit, es ich es manuell anstoße!
Kann ich dieses Skript automatisieren, dass es z.b. alle halbe Stunde ausgeführt wird, ohne dass ich es manuell anstoßen muss?

Wie oben schon gesagt, bin ich absoluter Neuling, daher wäre es schön, wenn mir die Lösung bzw. die Ansatzpunkte möglichst einfach und step-by-step erklärt werden könnten.

Vielen Dank im Voraus.

charno
Beiträge: 636
Registriert: 28.06.2004 20:24:34

Re: automatische Clientabfrage

Beitrag von charno » 08.09.2013 16:22:02

Hallo und willkommen im Forum.

Was du suschst ist cron.

Eine kurze Anleitung ist unter http://www.sysadminslife.com/linux/cron ... erstellen/ zu finden. Du musst den Cronjob als root anlegen, da nur root den Computer runterfahren darf.

lg
"Wer sich nicht bewegt, spürt seine Fesseln nicht." - Rosa Luxemburg

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: automatische Clientabfrage

Beitrag von Cae » 08.09.2013 19:46:53

snowball3rd hat geschrieben:ich bin absolut neu hier [...]

Debian 6 ist installiert
Dann ist es wohl ein schoenes Projekt, das System erst einmal auf Wheezy (Debian 7) upzudaten. Squeeze (Debian 6) ist old-stable und sollte nicht mehr verwendet werden.

Zur eigentlichen Frage: Ja, cron ist der richtige Anlaufpunkt. Wie eine Crontab korrekterweise aussieht, steht in der Manpage in Sektion 5 ("Dateien"), die du mittels

Code: Alles auswählen

$ man 5 cron
anzeigen laesst.

Willkommen im Forum!

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

snowball3rd
Beiträge: 21
Registriert: 17.02.2013 13:07:34

Re: automatische Clientabfrage

Beitrag von snowball3rd » 08.09.2013 20:11:12

Vielen Dank für deinen Link.
Soweit ich das auch richtig verstehe klingt das ja ganz einfach...

Mal schauen ob es tatsächlich so einfach ist, wie es sich liest.

Ich melde mich...

snowball3rd
Beiträge: 21
Registriert: 17.02.2013 13:07:34

Re: automatische Clientabfrage

Beitrag von snowball3rd » 08.09.2013 20:30:37

Folgenden .log-Inhalt habe ich jetzt.

Code: Alles auswählen

/bin/sh: /usr/bin/autoshutdown.sh: Permission denied
Wie kann ich denn dem cron die Rechte geben, die .sh auszuführen?

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: automatische Clientabfrage

Beitrag von Cae » 08.09.2013 21:39:32

Code: Alles auswählen

# chmod +x /usr/bin/autoshutdown.sh
Nicht Cron fehlen die Rechte, sondern die Datei ist als nicht ausfuehrbar markiert. Vergleiche im ls -l-Output das x in der Rechtemaske vorne.

Uebrigens solltest du so Skripte nach /usr/local/bin/ packen, da /usr/local/ bei Updates nie angefasst wird. Andernfalls koennte eine Datei aus der Paketverwaltung (apt, dpkg) mit dem eigenen Skript kollidieren, d.h. sie ueberschreiben sich gegenseitig bzw. man bekommt von dpkg eine Warnung, dass dies gerade passieren wuerde.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

snowball3rd
Beiträge: 21
Registriert: 17.02.2013 13:07:34

Re: automatische Clientabfrage

Beitrag von snowball3rd » 08.09.2013 21:53:04

Und wie mache ich es ausführbar?

Oder ist das schon mit dem Verschieben getan?

uname
Beiträge: 12403
Registriert: 03.06.2008 09:33:02

Re: automatische Clientabfrage

Beitrag von uname » 08.09.2013 22:20:16

Ausführbar wird es mit dem oben genannten chmod-Befehl. Und bei Fragen zu der Syntax zu Befehlen ist "man" dein Freund

Code: Alles auswählen

man chmod

snowball3rd
Beiträge: 21
Registriert: 17.02.2013 13:07:34

Re: automatische Clientabfrage

Beitrag von snowball3rd » 08.09.2013 22:42:11

Ich hab die Dateien jetzt mal in /usr/Skript/ verschoben.
Die Datei habe ich wie beschrieben "ausführbar" gemacht.

Die log-file sieht aber immer noch genauso aus.

Code: Alles auswählen

/bin/sh: /usr/Skript/autoshutdown.sh: Permission denied
Das ist das Ergebnis von ls -l

Code: Alles auswählen

-rwxrwxrwx 1 root root 363  8. Sep 23:09 autoshutdown.sh
Habe ich was falsch gemacht?
Sollten noch andere Infos zur Fehleranalyse benötigt werden, reiche ich es gerne nach.
Aber schonmal jetzt vielen Dank im Voraus.

edit:
ich bin als root angemeldet, falls das wichtig ist.

snowball3rd
Beiträge: 21
Registriert: 17.02.2013 13:07:34

Re: automatische Clientabfrage

Beitrag von snowball3rd » 10.09.2013 22:48:40

Hallo,
ich bin es nochmal.

Hab den Server nochmal resettet und alles neue gemacht.
Das Script wird jetzt ausgeführt und das auch zeitgesteuert mittels crontab.

Vielen Dank dafür schonmal.

So sieht das Script jetzt aus:

Code: Alles auswählen

#!/bin/bash

echo "Starting autoshutdown.sh ..."

# Liste der zu überwachenden Computer
IP1=x.x.x.1
IP2=x.x.x.2
IP3=x.x.x.3

if (ping -c 3 $IP1 || ping -c 3 $IP2 || ping -c 3 $IP3 ||\
    (echo "90 Sekunden Tiefschlaf"; sleep 90; ping -c 3 $IP1 || ping -c 3 $IP2 || ping -c 3 $IP3)
then
    echo "Mindestens 1 Client am Netz. "
else
    echo "Alle Clients offline, Server wird heruntergefahren. "
    # Eintrag ins Logfile
    echo "Alle Clients offline, Server wird heruntergefahren. " | logger -i -t autoshutdown.sh
    shutdown -h 1
fi

echo "Ende von autoshutdown.sh ..."

exit 0
Habe dem Script folgende Rechte eingeräumt:

Code: Alles auswählen

chmod u+x [DATEI] 
So schaut Crontab aus:

Code: Alles auswählen

*/15 * * * * /bin/script/shutdownperping >> /bin/script/shutping.log 2>&1
Jetzt habe ich aber folgendes Problem:
Und zwar wird zwar nach den IPs im Netzwerk gesucht und auch festgestellt, dass keine der IPs noch online ist, aber es wird das Kommando shutdown nicht gefunden.

Auszug aus der .log:

Code: Alles auswählen

/bin/script/shutdowonperping: Zeile 17: shutdown: Kommando nicht gefunden
Wie kann ich dieses einbinden bzw. was ich noch falsch im Script?
Vielen Dank

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: automatische Clientabfrage

Beitrag von Cae » 10.09.2013 23:35:24

Setze $PATH in der Crontab oder verwende als absoluten Pfad /sbin/shutdown.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

snowball3rd
Beiträge: 21
Registriert: 17.02.2013 13:07:34

Re: automatische Clientabfrage

Beitrag von snowball3rd » 13.09.2013 23:43:59

Vielen Dank. Klappt.

Jetzt kommt mir ein Gedanke bzw. eine Frage auf. Ich hoffe die könnt ihr mir beantworten.

Ist dieser shutdown dominant gegenüber zb. einem Kopiervorgang?
Ich stelle mir gerade vor, ich mache ein Backup einer ext. Festplatte auf die interne, was länger als der in crontab eingestellte Intervall.

Wird der PC dann heruntergefahren trotz der Aktivität?
Wenn ja, kann man dies noch in dem Skript einbauen?

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: automatische Clientabfrage

Beitrag von Cae » 14.09.2013 00:10:03

shutdown macht Shutdown, egal, was gerade laeuft. Ob's dazu einen offiziellen Mechanismus gibt, um einen anlaufenden Shutdown anzuhalten, weiss ich nicht. Man koennte per pgrep ein paar mal nach den ueblichen Verdaechtigen wie cp oder rsync gucken, oder vielleicht die Trafficcounter der Dateisysteme zurate ziehen. Falls noch Aktivitaet vermutet wird, wartet man einfach und macht den Shutdown danach.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

snowball3rd
Beiträge: 21
Registriert: 17.02.2013 13:07:34

Re: automatische Clientabfrage

Beitrag von snowball3rd » 14.09.2013 07:33:06

Cae hat geschrieben:Falls noch Aktivitaet vermutet wird, wartet man einfach und macht den Shutdown danach.

Gruss Cae
Da es in dem Thread um einen automatisierten Shutdown geht, der per Skript ausgeführt wird, geht das wohl schlecht.
Bzw. ist genau das meine Frage, wie ich es hinbekomme, dass der shutdown später gemacht wird.

Nochmal:
Kann ich eine WENN-Formel in das Skript einbauen, welche auf zb. Festplattenaktivität prüft und dann den shutdown nicht aufführt, wenn welche vorhanden ist?

Entschuldigt die evtl. falsche Formulierung, aber ich versuche es möglichst verständlich auszudrücken, ohne die Fachbegriffe, die ich definitiv nicht kenne und wahrscheinlich angebracht wären.

snowball3rd
Beiträge: 21
Registriert: 17.02.2013 13:07:34

Re: automatische Clientabfrage

Beitrag von snowball3rd » 16.09.2013 18:27:46

Für alle die das vielleicht nachbauen wollen und genauso wenig Ahnung haben wie ich, hiernochmal das komplette funktionierende Script.

Code: Alles auswählen

#!/bin/bash

# Pfade setzen
PATH=/sbin:/bin:/usr/bin:/usr/sbin:/usr/bin/X11:

echo "Starting autoshutdown.sh ..."

# Liste der zu überwachenden Computer
IP1=x.x.x.1
IP2=x.x.x.2
IP3=x.x.x.3

if (ping -c 3 $IP1 || ping -c 3 $IP2 || ping -c 3 $IP3 ||\
    (echo "90 Sekunden Tiefschlaf"; sleep 90; ping -c 3 $IP1 || ping -c 3 $IP2 || ping -c 3 $IP3)
then
    echo "Mindestens 1 Client am Netz. "
else
    echo "Alle Clients offline, Server wird heruntergefahren. "
    # Eintrag ins Logfile
    echo "Alle Clients offline, Server wird heruntergefahren. " | logger -i -t autoshutdown.sh
    shutdown -h now
fi

echo "Ende von autoshutdown.sh ..."

exit 0
Da ich das Script selbst irgendwo herkopiert habe, weiß ich leider nicht was der Punkt 'Eintrag ins Logfile bringt bzw. wo das logfile ist.
Solange es funktioniert ist mir das auch egal.
Wenn mir aber jemand sagen kann, welchen Teil ich davon noch weghauen kann, wäre ich auch dankbar drum. Brauche das nicht!

Und hier noch der dazugehörige Cronjob, damit dieses Script alle ... Minuten ausgeführt wird, mit endsprechendem Logfile.

Code: Alles auswählen

*/... * * * * /bin/script/shutdownperping >> /bin/script/shutping.log 2>&1
Vielen Dank für die Hilfe an alle, die sich an diesem Thread beteiligt haben... :THX:

Antworten