Applescript für Wake-on-Lan und Automount

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.

7 Gedanken zu „Applescript für Wake-on-Lan und Automount

    1. 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.

  1. 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

    1. 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?

      1. Naja, ich habe das ganze in den vi gepackt, als sh gespeichert, rechte angepasst und awake installiert. war ich da zu blauäugig? 🙂

        1. 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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.