Mac OS X ist ein tolles Betriebssystem. Der Unix Unterbau kommt mir sehr entgegen, es gibt halt weniger Viren und das OS ist sehr Robust. Dazu gibt es noch eine schöne reibungslos laufenden Oberfläche. Eine Sache die Linux leider in den letzten Jahren nicht wirklich zustande gebracht hat.
Leider ist Mac OS dann doch sehr stark „Endbenutzer“- Mäßig geprägt. Bedeutet man soll am besten nichts machen was nicht in der GUI vorgesehen ist.
Das merkt man auch auf der Kommandozeile. Standardtools aus der Unix / Linux Welt fehlen halt. Dinge wie Netcat, WOL oder wenn ich mich recht erinnere sogar wget, muss man sich mühsam über Projekte wie Macports nachinstallieren.
Das kann eigentlich recht einfache aufgaben doch erheblich verkomplizieren, auf der anderen Seite strengt man dadurch doch des öfteren auch mal wieder die grauen Zellen an 😉
So ging es mir gestern, die Vorgeschichte ist eigentlich schnell erklärt. Meine Frau hat sehr viele EBooks die Sie mit Calibre bzw. in einer eigenen Ordnerstruktur verwaltet. Bis jetzt lag diese Sammlung auf einer, doch recht altersschwachen externen Festplatte. Da ich jedoch nicht das Risiko eingehen wollte den Schädel gespalten zu bekommen, wenn die Platte mal kaputt geht, musste das ganze auf einen eigenen Share auf unseren unRaid Server umziehen.
Der Umzug war auch schnell erledigt, jetzt muss ich nur noch zusehen das meine Frau auch wieder Zugriff auf den Share bekommt. Früher war das einfach: Platte einstöpseln, einschalten, warten bis sie erkannt wird, Calibre starten.
Das ganze ist jetzt ein wenig komplizierter, da ggf. erst der Server per WOL geweckt werden muss (alles andere wäre Energieverschwendung die nur dem Versorger gefällt) und dann der Share gemounted werden muss.
Das muss einfacher gehen, dachte ich mir. Da ich dafür kein passendes Programm gefunden habe, habe ich selber ein kleines Script geschrieben. Applescript schien mir dafür dafür eine gute Wahl zu sein. So schwer konnte das auch nicht sein, denn das Script muss ja nur einige wenige Schritte durchführen:
- Überprüfen ob der Server schon läuft, wenn nicht per WOL wecken
- Share mounten
- Calibre starten
Das einzige „Problem“ hierbei ist das Mac OS X keinen eigenen WOL Client an Board hat, was ehrlich gesagt ein Armutszeugnis ist.
Es gibt Clients für Mac OS, wie das Tool WakeOnLan von Readpixel, das sich auch per Applescript ansprechen lässt (deren Website ist aber schon seit Ewigkeiten down sodass ich mich darauf nicht verlassen möchte) oder das WakeOnLan Tool 2 , dies benötigt jedoch das Mono Framework und ausserdem brauch ich die Gui nicht.
Man kann auch per Macports, den Kommandozeilen wol Client aus der Linux / Unix Welt nutzen. Macports hat aber den Nachteil das man ersteinmal 1,6GB an Daten von Apple Laden muss um XCode zu installieren, und das nur um einmal einen wol Client zu übersetzen. Das ist meiner Meinung nach wieder mit Kanonen auf Spatzen geschossen.
Dann kam mir die Idee, was wird bei Mac OS immer mitgeliefert? Python! Und für Python gibt es das nette Tool Awake, welches genau das gleiche macht wie der WOL Client auf der Kommandozeile.
Dieses kleine Tool benötigen wir für unser Script. Man kann es im Mac Terminal ganz leicht nachinstallieren:
sudo easy_install awake
Na super dann können wir endlich unser Script schreiben.
try set status to do shell script "ping -c 1 -t 2 SERVER_IP" on error do shell script "/usr/local/bin/awake -b SERVER_BROADCAST SERVER_MAC" delay 10 end try try mount volume "smb://Guest:@SERVER_IP/SHARE" set lstDisk to list disks repeat until lstDisk contains "SHARE" set lstDisk to list disks delay 1 end repeat tell application "calibre" to activate end try
Wie man sieht ist das Script echt simpel. Man muss nur die Angaben zur SERVER_IP, der SERVER_BROADCAST (hat der Server die IP 192.168.1.1 dann wäre der Broadcast 192.168.1.255), SERVER_MAC und den Namen des Shares ändern. Das Script überprüft dann per Ping ob der Server online ist, gibt ping einen Fehler zurück (egal welchen ob es jetzt 100% Package loss oder Host unreachable ist) dann wird der Server per awake geweckt. Das delay sorgt dafür das der Server genug Zeit zum aufwachen hat. Bei meinem reichen 10 sek. vollkommen aus, der er nur im S3 schlummert. Anschließen mounten wir den betreffenden Share als Gast (man kann auch User und Passwort angeben) und warten in der Repeat Schleife bisder Share gemounted ist. Anschließend wir Calibre gestartet.
Das ganze können wir im Apple Script Editor als Programm abspeichern und dann Ausführen.
Wie gesagt das Script ist echt simpel und es bietet sicher noch Raum für Verbesserungen (immer her damit), aber ich denke es ist auch ein gutes Grundgerüst um solche Aufgaben auf Knopfdruck zu erledigen.
was meinst Du mit SERVER_MAC IP des Servers oder IP des eigenen Rechners?
Server_Mac bzw. Server_IP stehen für die Mac Adresse und die IP des zu weckenden Rechners.
IP und MAC des ausführenden Rechners tun bei WOL nichts zur Sachen.
Hi Björn,
danke für diesen Tip, ich habe das script angepasst, aber es wirft mir das zurück:
awakesrv: line 1: try: command not found
awakesrv: line 4: on: command not found
awakesrv: line 6: syntax error near unexpected token `do‘
awakesrv: line 6: ` do shell script „/usr/local/bin/awake -b 192.xxx.xxx.255 00:xx:xx:xx:xx“‚
was läuft hier falsch?
Viele Grüße & Danke
Chris
Du hast das ganze aber auch in den Applescript Editor eingetippt und nicht einfach in nen TExt Editor und dann als Shellscript abgespeichert, oder?
Awake haste auch installiert?
Naja, ich habe das ganze in den vi gepackt, als sh gespeichert, rechte angepasst und awake installiert. war ich da zu blauäugig? 🙂
Dann haste den Fehler schon gefunden.Das ganze ist ja kein Shellscript, geht sicher auch, aber die Apple Script Lösung war für mich schneller und einfacher. Also den Code in den Applescript Editor kopieren und dann soll das ganze auch funktionieren.
Super Tip mit dem Python-Tool, funktioniert erste Sahne und ist schlank 🙂
Hallo, dieses „sudo easy_install awake“ funktioniert bei mir leider nicht. Ich erhalte dann sowas:
Searching for awake
Reading https://pypi.python.org/simple/awake/
Download error on https://pypi.python.org/simple/awake/: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590) — Some packages may not be found!
Muss ich das Programm erst herunterladen oder wie geht das genau? Sorry bin da ein Noob.
Welche OSX Version verwendest du? Sieht so aus als ob dein Python eine alte SSL Version nutzt die nicht mehr auf pypi zugreifen kann.
Vielen Dank das hat mir sehr geholfen. Ich habe ein bestehendes Skript anpassen können welches seit dem letzten OSX update nicht mehr funktionierte. Es nutzte zum WOL ein auf 32 bit basierendes kleines Programm um ein „magic package“ zu senden. Ich wusste bisher nichts über das awake von phyton und danke sehr für den Tip und die Anregung.
Hallo,
scheinbar funktioniert Awake nicht mehr mit der neuesten MacOS Version weil Python entfernt wurde. Gibt es dazu eine alternative? Kann man Awake auch unter Python 3 benutzen, wenn ja wie? Vielen Dank für die Mühe, hat bisher immer wunderbar funktioniert.
Sorry habe kein MacOS mehr im Einsatz.