• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

Netzwerklaufwerk mounten, wenn verfügbar...

c0heed

Jonathan
Registriert
24.05.10
Beiträge
82
Hallo!
Ich möchte ein Script schreiben, dass immer wieder checkt ob ein Netzwerklaufwerk verfügbar ist und falls es das ist soll es gemountet werden. Ich habe es mit folgendem Script versucht, das klappt aber nicht, das Laufwerk wird immer wieder ausgeworfen und wieder gemountet... Nun habe ich überhaupt keine Ahnung von AppleScript und brauche daher Hilfe :D
Wie würdet ihr das lösen?

Code:
[B]repeat[/B][COLOR=#5f6161][COLOR=#000000]    [/COLOR]-- (0) check server's response[/COLOR]
    [B]set[/B] [COLOR=#579000]max_retry[/COLOR] [B]to[/B] 60
    [B]set[/B] [COLOR=#579000]k[/COLOR] [B]to[/B] 0
    [B]repeat[/B] [B]while[/B] ([COLOR=#0e2ebf][B]do shell script[/B][/COLOR] "ping -c 1 10.0.1.198 2>&1; exit 0") [B]contains[/B] "100% packet loss"
[COLOR=#0e2ebf][COLOR=#000000]        [/COLOR][B]delay[/B][COLOR=#000000] 5[/COLOR][/COLOR]
        [B]set[/B] [COLOR=#579000]k[/COLOR] [B]to[/B] [COLOR=#579000]k[/COLOR] + 1
        [B]if[/B] [COLOR=#579000]k[/COLOR] > [COLOR=#579000]max_retry[/COLOR] [B]then[/B] [B]error[/B] "Server is not responding for predefined period." [COLOR=#102dff]number[/COLOR] 8000
    [B]end[/B] [B]repeat[/B]
    
[COLOR=#5f6161][COLOR=#000000]    [/COLOR]-- (1) mount server volume[/COLOR]
[COLOR=#000000]
[/COLOR]
    [COLOR=#0e2ebf][B]mount volume[/B][/COLOR] "afp://user:[email protected]/Mediathek"
    
[B]end[/B] [B]repeat[/B]
 

c0heed

Jonathan
Registriert
24.05.10
Beiträge
82
Weiss keiner Rat? Es müsste doch irgendwie möglich sein...
 

adehlfing

Pomme au Mors
Registriert
24.08.09
Beiträge
873
Mach einfach folgendes als Apple Skript:

Code:
try
    mount volume "smb://[B]<IP>[/B]/[B]<Folder>[/B]"
end try

Das fettgeschriebene einfach durch deine eigenen Werte ersetzen.

Dieses Skript dann einfach automatisch beim Start ausführen lassen.
 

c0heed

Jonathan
Registriert
24.05.10
Beiträge
82
Hmm, ich weiss nicht ob ich mich richtig ausgerückt habe.
Der Medienserver ist nicht immer an, das heisst der Mac-Mini findet den Server nicht immer beim starten, da dieser nicht immer an ist.
Ich möchte ein Skript haben, dass eigentlich immer im Hintergrund läuft und alle paar Minuten nachschaut ob der Server an ist und sich dann mit ihm verbindet.

Am einfachsten wäre es ja so:
Code:
repeattry    mount volume "smb://[B]<IP>/[B]<Folder>"end tryend repeat[/B][/B]

Aber dann wieder das Laufwerk immer ausgeworfen und dann wieder geladen und das bringt mir ja nichts, deshalb suche ich einen anderen Weg...
 

fyysh

Schweizer Glockenapfel
Registriert
25.01.10
Beiträge
1.386
Wie würdet ihr das lösen?
So <--- *KLICK*

Edit:
Aber dann wieder das Laufwerk immer ausgeworfen und dann wieder geladen und das bringt mir ja nichts, deshalb suche ich einen anderen Weg...

Dafür benutzt du am besten launchd + eine entsprechende plist.

Auswerfen, wenn nicht mehr verfügbar, wird das System die Mounts selber.

Wenn das Script läuft und die Shares schon gemountet sind, passiert genau gar nix. Es Mountet die (normalerweise) nicht nochmal neu.
 
Zuletzt bearbeitet:

c0heed

Jonathan
Registriert
24.05.10
Beiträge
82
Hi fyysh!
Danke für deine Antwort! Das Skript muss ich jetzt einfach als Programm (nicht automatisch beenden) speichern?
Nur komme ich nicht ganz draus was ich mit launchd machen soll... :(
Kannst du mir noch einen Tipp geben?
 

fyysh

Schweizer Glockenapfel
Registriert
25.01.10
Beiträge
1.386
Hmm, wenn du überhaupt keine Erfahrung mit launchd hast und nicht googeln/das Forum durchstöbern möchtest, dann wäre das die einfachste Möglichkeit:

Code:
property volMap : {¬    {prot:"afp", srv:"server", share:"share"}, ¬
    {prot:"smb", srv:"server", share:"share/folder"}}


property repeatDelay : 300 --seconds


on run
    doStuff()
end run


on idle
    delay repeatDelay
    doStuff()
end idle


on doStuff()
    repeat with aVol in my volMap
        tell aVol
            set server to its srv
            set shrURL to (its prot & "://" & its srv & "/" & its share)
            
        end tell
        if pingTest(server) then
            with timeout of 5 seconds
                try
                    mount volume shrURL
                end try
            end timeout
        end if
    end repeat
end doStuff


on pingTest(server)
    with timeout of 1 second
        try
            do shell script "ping -c1 " & server
            return true
        end try
    end timeout
    return false
end pingTest

Das als stay open app gespeichert und ab dafür.
 
Zuletzt bearbeitet:

c0heed

Jonathan
Registriert
24.05.10
Beiträge
82
Ein wirklich grosses Dankeschön an dich fyysh! Genau so was habe ich gesucht!
Ich wäre wahrscheinlich ein paar Wochen dran gewesen, bis ich etwas ähnliches zusammen geschustert hätte. Ich habe zwar nach Beispielen von launchd gesucht und auch welche gefunden, aber ich versteh da nur Bahnhof...

Nochmals ein grosses Danke!
 

fyysh

Schweizer Glockenapfel
Registriert
25.01.10
Beiträge
1.386
Bitteschön.

BTW: OSX bietet seit 10.4, wenn ich mich richtig entsinne, noch ein Feature namens "automount", mit dem man dasselbe auch ohne Apfelscript bewerkstelligen könnte. Das einrichten ist allerdings ein wenig geeky.