Remote shutdown unter Linux?

Digital Recording
Logdog82
Interessierter
Interessierter
Beiträge: 28
Registriert: Sonntag 23. Januar 2005, 18:54

Remote shutdown unter Linux?

Beitrag von Logdog82 »

Hallo Mädels :wink:,
ich habe schon seit langer Zeit eine DBox mit Yadi Image und bin hellauf begeistert. Auch das Aufnahmen auf meinem Linux Server per "mono udrec.exe" funktioniert 1A. Auch WOL von der Dbox aus, so dass mein Server immer automatisch eingeschalten wird funktioniert erste Sahne.
Auf meinem linux Server hab ich es so eingerichtet dass udrex automatisch beim booten startet. Funktioniert, wie nicht anders zu erwarten :P , auch 1A 8)
Von dem her bin ich eigentlich fast schon wunschlos glücklich. Nur eine Sache hätt ich noch gern: dass mein Linux Server automatisch runter gefahren wird wenn die Aufnahme fertig ist. Soweit ich das hier raus lesen konnte gibts von JTG ein Tool das dies vollautomatisch macht. Voraussetzung: Windows. Kennt jemand einen Trick wie ich auch das unter Linux bewerkstelligen könnte? Ich selbst denke dass es da extrem schlecht aussieht weil man ja den shutdown expliziet nur als root ausführen kann und man somit immer zuerst das root Kennwort eingeben muß bevor da was geht.
Aber vielleicht kennt einer von euch ja doch nen Trick oder Kniff das irgendwie zu bewerkstillgen.
Danke schon mal für eine Antwort.
petb
Erleuchteter
Erleuchteter
Beiträge: 785
Registriert: Samstag 6. August 2005, 03:39

Beitrag von petb »

Hi,

vieleicht geht es wenn du einen Cron Job mit root Rechten laufen lässt, der immer schaut ob eine Datei da ist oder nicht.
Wenn diese Datei da ist, löscht der cronjob die Datei und fährt den Server runter.

Die Datei kannst du dann im record.end anlegen.

Weis nicht ob das so geht, aber das war mein erster Gedanke dazu.
bye
PetB
1 x DBOX2 Phillips, 1 x DBOX2 Nokia, 1 x DBOX2 Sagem, 100er Gibertini (Astra / Hotbird), NFS Server
Logdog82
Interessierter
Interessierter
Beiträge: 28
Registriert: Sonntag 23. Januar 2005, 18:54

Beitrag von Logdog82 »

Hmmm... du meinst dass die Dbox bei Aufnahmeende automatisch eine Datei per NFS anlegen soll und ein Cronjob auf meinem Linux Server immer nachschaut ob diese Datei da ist. Wenn ja soll er sie löschen und danach runter fahren? hmm.. hört sich eigentlich super an find ich. :P
Nur wie kann ich der DBox beibringen dass sie eine Datei erstellen soll (per "touch"?)? Du schreibtest was von "record.end". Das sagt mir leider nichts. Ist das die Datei die ausgeführt wird wenn die Aufnahme stoppt?
Danke dir schon mal.
edit:
hab jetzt mal ein bischen rum gesucht und im Ordner /var/tuxbox/config eine Datei namens recording.end (rechte 755) angelegt. Hab dort drin jetzt mal nur testweise folgendne code rein geschreiben

#!/bin/sh
touch lala.sh

somit müsste bei Aufnahmenede direkt auf der Dbox lokal die Datei lala.sh angelegt werden. Dies passiert jedoch nicht. Weder über direktaufnahme (also über blaue => rote taste) als auch über zeitgesteuerte aufnahme nicht :gruebel: Idee warum bzw. wann die recording.end ausgeführt wird?
pumpkin
Interessierter
Interessierter
Beiträge: 27
Registriert: Freitag 24. Oktober 2003, 09:08

Beitrag von pumpkin »

du kannst einen dienst für inetd bsw. xinetd definieren, der auf einem bestimmten port hört

z.b. so ähnlich:

/etc/xinetd.d/dbox:

service dbox
{
port = 4711
socket_type = stream
protocol = tcp
user = root
group = root
server = /root/bin/dbox
type = UNLISTED
wait = no
only_from = 192.168.123.0/24
}

/root/bin/dbox:

#!/bin/sh
/sbin/halt


in record.end kannste dann nc ip 4711 aufrufen. dann sollte dein server runter fahren.
Logdog82
Interessierter
Interessierter
Beiträge: 28
Registriert: Sonntag 23. Januar 2005, 18:54

Beitrag von Logdog82 »

super danke. So ginge es natürlich auch. Nur hab ich leider das Problem dass meine recording.end nicht ausgeführt wird (oder ich zu doof für die recording.end bin hihi):
Logdog82 hat geschrieben: hab jetzt mal ein bischen rum gesucht und im Ordner /var/tuxbox/config eine Datei namens recording.end (rechte 755) angelegt. Hab dort drin jetzt mal nur testweise folgendne code rein geschreiben

#!/bin/sh
touch lala.sh

somit müsste bei Aufnahmenede direkt auf der Dbox lokal die Datei lala.sh angelegt werden. Dies passiert jedoch nicht. Weder über direktaufnahme (also über blaue => rote taste) als auch über zeitgesteuerte aufnahme nicht :gruebel: Idee warum bzw. wann die recording.end ausgeführt wird?
pumpkin
Interessierter
Interessierter
Beiträge: 27
Registriert: Freitag 24. Oktober 2003, 09:08

Beitrag von pumpkin »

hast du auch schreibberechtigung dort wo du die datei anlegen willst?

#!/bin/sh
cd /tmp
touch bla
Logdog82
Interessierter
Interessierter
Beiträge: 28
Registriert: Sonntag 23. Januar 2005, 18:54

Beitrag von Logdog82 »

:D 8) :P
cool danke das wars. Hab ich glatt vergessen ich Esel dass man ja schreibrechte braucht. :)
Cool merci. Den Rest mach ich dann morgen (entweder die Cronjob/NFS Lösung oder deine. Muß ich schaun).
Danke euch. Wart mir echt eine Hilfe.
petb
Erleuchteter
Erleuchteter
Beiträge: 785
Registriert: Samstag 6. August 2005, 03:39

Beitrag von petb »

Logdog82 hat geschrieben::D 8) :P
cool danke das wars. Hab ich glatt vergessen ich Esel dass man ja schreibrechte braucht. :)
Cool merci. Den Rest mach ich dann morgen (entweder die Cronjob/NFS Lösung oder deine. Muß ich schaun).
Danke euch. Wart mir echt eine Hilfe.
Die andere Lösung geht halt ohne Zeitversatz und ohne Umweg über eine Datei.
Sieht eleganter aus als meine :wink:

Wenn das bei dir klappt, poste doch bitte genau wie du und wo du was angelegt hast.
Das interessiert mich, danke.

Ich muss demnächst von meinem NT Server aus 2 Linux Rechner runterfahren, das die USV Steuerung auf dem NT Server läuft.
Da würde mir das auch zu Hilfe kommen.
Bye
PetB
1 x DBOX2 Phillips, 1 x DBOX2 Nokia, 1 x DBOX2 Sagem, 100er Gibertini (Astra / Hotbird), NFS Server
Logdog82
Interessierter
Interessierter
Beiträge: 28
Registriert: Sonntag 23. Januar 2005, 18:54

Beitrag von Logdog82 »

Also hab mich jetzt doch für die NFS Methode entschlossen da ich noch gern gleich da ein paar andere Sachen damit abdecken möchte.
Auf dem Server läuft nun ein funktionierender Cronjob der sauber schaut ob eine Datei namens "halt" existiert. Wenn ja wird er herunter gefahren.
Fehlt nur noch eins: die Dbox soll per NFS die Datei erstellen.
Dazu hab ich folgendes Script erstellt (recording.end)

Code: Alles auswählen

#!/bin/sh
mount -t nfs barebone:/dbox_shutdown /mnt/custom -o rw,rsize=32768,wsize=8192,soft,udp,async,nolock &
touch /mnt/custom/halt
Wenn ich dies in der konsole ausführe per ./recording.end funktioniert es und die Datei wird angelegt. Nur wenn die Aufnahme stopp wird es nicht ausgeführt. Jemand eine idee?
ach ja wenn ich statt des obigen das hier in die recording.end schreibe

Code: Alles auswählen

#!/bin/sh
touch /tmp/bla
funktioniert es. nur das mounten und das schreiben der file nicht. komisch
petb
Erleuchteter
Erleuchteter
Beiträge: 785
Registriert: Samstag 6. August 2005, 03:39

Beitrag von petb »

Ich verwechsel das immer,
wie war das nochmal mit dem & Zeichen am Schluss ?

Wenns da ist wartet er auf das Ende, wenn nicht dann geht er gleich zum nächsten BEfehl oder... ????

Ich glaube das es so war das er wenn das & benutzt wird der Prozess in den Hintergrund geschoben wird und gleich der nächste Befehl abgesetzt wird.
Das würde dan bei dir dazu führen das der mount eventuell noch nicht fertig ist, du aber schon schreiben willst.
Jep, habe eben ein Unix Bich rausgekramt.
Da steht es ... mit & geht der Prozess in den Hintergrund und die shell kommt wieder, sprich der nächste Befehl wird abgearbeitet.

Poste doch bitte mal die Zeile deines cron jobs.

Bye
PetB
1 x DBOX2 Phillips, 1 x DBOX2 Nokia, 1 x DBOX2 Sagem, 100er Gibertini (Astra / Hotbird), NFS Server
Frockert
Erleuchteter
Erleuchteter
Beiträge: 865
Registriert: Dienstag 12. März 2002, 21:40

Beitrag von Frockert »

Logdog82 hat geschrieben: Nur wenn die Aufnahme stopp wird es nicht ausgeführt. Jemand eine idee?
ach ja wenn ich statt des obigen das hier in die recording.end schreibe

Code: Alles auswählen

#!/bin/sh
touch /tmp/bla
funktioniert es. nur das mounten und das schreiben der file nicht. komisch

Wieso willst Du denn nochmal extra mounten? Da Du beim Aufnehmen bist hat er doch schon gemountet?
Vermutlich funktioniert deshalb Dein erstes Skript auch nicht, das wiederholen des Mountens schlägt fehl und zieht den Rest des Befehls mit in den Fehlerausgang.

Lass das Mounten im ersten Beispiel mal weg und mach nur den touch auf dem Pfad.



Gruß
Frockert
---------------------------
2.6.11-kanotix-3 KDE 3.3.2
http://www.frockert.de
http://www.eifel-forum.de
Logdog82
Interessierter
Interessierter
Beiträge: 28
Registriert: Sonntag 23. Januar 2005, 18:54

Beitrag von Logdog82 »

petb hat geschrieben:Ich verwechsel das immer,
wie war das nochmal mit dem & Zeichen am Schluss ?
Ja genau das & Zeichen hab ich gemacht weil wenn ich in der Konsole per Telnet den oben genannten Mount Befehl absetze blinkt nur noch der Cursor in der Konsole und mehr passiert nicht. Das Verzeichnis ist zwar gemountet (das weiß ich weil wenn ich eine zweite Telnet Session aufmache kann ich in den gemounteten Ordner rein) aber der Cursor springt nicht weiter. Es passiert dann einfach nichts mehr. Deshalb das & dass es in den Hintergrund geschoben wird.
Das der nächste Befehl zu schnell kommt könnte natürlich evtl. sein. Dazu müsst ich einfach ein "sleep 1000" rein setzten damit er eine Sekunde wartet oder? Wobei das eigentlich auch nicht sein kann weil ich mal versuchsweise davor schon gemountet hab und es trotzdem nicht ging. Wie gesagt ich kann das Script auch per telnet manuell ausführen mittels "./recording.end". Dann gehts ja auch. Er machts nur nicht automatisch wenn die Aufnahme beendet wird. Echt komisch :(
petb hat geschrieben:Poste doch bitte mal die Zeile deines cron jobs
Warum? Nur so interessehalber was hat der cronjob von meinem Aufnahmeserver damit zu tun?
Frockert hat geschrieben:Wieso willst Du denn nochmal extra mounten? Da Du beim Aufnehmen bist hat er doch schon gemountet?
Warum sollte ich ein Verzeichnis mounten wenn ich aufnehme? :gruebel:
Ach du meinst wegen Direktaufnahme? Nö das mach ich nicht. Aufm Server läuft udrec. Deshalb ist da nichts gemountet. Hab damals gelesen dass udrec besser sei als NFS direktaufnahme.
Frockert hat geschrieben:Vermutlich funktioniert deshalb Dein erstes Skript auch nicht, das wiederholen des Mountens schlägt fehl und zieht den Rest des Befehls mit in den Fehlerausgang
Wenn man ein Verzeichnis mounten will was bereits gemountet ist passiert einfach gar nichts. Er geht einfach weiter. Nix Fehlerausgang :wink:

PS: gibts nicht auch nen IRC Chat wo man darüber reden kann am Abend mal oder so?
Hagan
Einsteiger
Einsteiger
Beiträge: 198
Registriert: Sonntag 15. Februar 2004, 20:33

Beitrag von Hagan »

Hallo.

Warum startest Du nicht einfach udrec mit dem Parameter "-sso" aus einem Script heraus und läßt dieses Script nach dem Ende von udrec den Rechner herunterfahren?
petb
Erleuchteter
Erleuchteter
Beiträge: 785
Registriert: Samstag 6. August 2005, 03:39

Beitrag von petb »

Hi,

ich wollte deinen cronjob sehen um es mir leichter zu machen.
Sprich: ich wollte dein geistiges Eigentum klauen :oops: :oops:

Ich weis nicht mehr genau wie der aufbau war und ob ich da root mit angeben muss oder....... wollte eben wissen wie es genau geht :lol:

Was den Mount angeht, wenn ich mounte und dann nochmal mounte, denke ich im Moment muss ich auch zweimal umount absetzen oder nicht ?

Bye
PetB
1 x DBOX2 Phillips, 1 x DBOX2 Nokia, 1 x DBOX2 Sagem, 100er Gibertini (Astra / Hotbird), NFS Server
Logdog82
Interessierter
Interessierter
Beiträge: 28
Registriert: Sonntag 23. Januar 2005, 18:54

Beitrag von Logdog82 »

Hi,
ich wollte nur bescheid geben dass jetzt alles klappt 8)
Ich hab einfach noch die Zeile "sleep 2" eingefügt so dass er zwei Sekunden warten soll nach dem mounten. Jetzt klappt alles. Vielen dank Jungs :D
Hier noch mal meine recording.end:
#!/bin/sh
mount -t nfs rechner:/dbox_shutdown /mnt/custom -o rw,rsize=32768,wsize=8192,soft,udp,async,nolock &
sleep 2
touch /mnt/custom/halt
Hier mein Cronjob (als root) für petb :wink:
*/10 * * * * python /usr/local/bin/shutdown.py
Und hier noch das Python Script was ich mir geschrieben habe:
#!/usr/bin/python
import os
if os.path.isfile("/dbox_shutdown/halt"):
os.system("rm -rf /dbox_shutdown/halt")
os.system("/sbin/shutdown -h now")
Danke noch mal :)
petb
Erleuchteter
Erleuchteter
Beiträge: 785
Registriert: Samstag 6. August 2005, 03:39

Beitrag von petb »

Logdog82 hat geschrieben:Hi,
ich wollte nur bescheid geben dass jetzt alles klappt 8)
Ich hab einfach noch die Zeile "sleep 2" eingefügt so dass er zwei Sekunden warten soll nach dem mounten. Jetzt klappt alles. Vielen dank Jungs :D
Hier noch mal meine recording.end:
#!/bin/sh
mount -t nfs rechner:/dbox_shutdown /mnt/custom -o rw,rsize=32768,wsize=8192,soft,udp,async,nolock &
sleep 2
touch /mnt/custom/halt
Hier mein Cronjob (als root) für petb :wink:
*/10 * * * * python /usr/local/bin/shutdown.py
Und hier noch das Python Script was ich mir geschrieben habe:
#!/usr/bin/python
import os
if os.path.isfile("/dbox_shutdown/halt"):
os.system("rm -rf /dbox_shutdown/halt")
os.system("/sbin/shutdown -h now")
Danke noch mal :)
Danke :lol:
Was bedeutet denn der / vor der 10 ?
Kann ich das nicht auch als shellscript im cronjob aufrufen, doch oder ?!
Und der cronjob als root, muss da nicht noch root dahinter stehen ? oder wie ist das genau ?

Danke
bye
PetB
also anstelle
1 x DBOX2 Phillips, 1 x DBOX2 Nokia, 1 x DBOX2 Sagem, 100er Gibertini (Astra / Hotbird), NFS Server
Logdog82
Interessierter
Interessierter
Beiträge: 28
Registriert: Sonntag 23. Januar 2005, 18:54

Beitrag von Logdog82 »

Das / vor der 10 bedeutet dass der cronjob alle 10 Minuten ausgeführt wird.
Hier mal generell für dich eine Übersicht der Spalten

Code: Alles auswählen

*     *   *   *    *  command to be executed
-     -    -    -    -
|     |     |     |     |
|     |     |     |     +----- day of week (0 - 6) (Sunday=0)
|     |     |     +------- month (1 - 12)
|     |     +--------- day of month (1 - 31)
|     +----------- hour (0 - 23)
+------------- min (0 - 59)
Im cronjob kannst du alles eintragen. Sowohl shellscripte als auch binär Dateien. Geht alles
Zu root: nein. Du mußt nur den cronjob als root einrichten. Unter Ubuntu z.B. per "sudo crontab -e". Bei allen anderen Distributionen wo es "normale" root accounts gibt einfach per "su -" als root einloggen und dann mittels "crontab -e" den cronjob eintragen. Fertig :wink:
petb
Erleuchteter
Erleuchteter
Beiträge: 785
Registriert: Samstag 6. August 2005, 03:39

Beitrag von petb »

Aha,

super danke.

bye
PetB
1 x DBOX2 Phillips, 1 x DBOX2 Nokia, 1 x DBOX2 Sagem, 100er Gibertini (Astra / Hotbird), NFS Server