Applescript för att hålla kontakten med SMB share, lite hjälp önskas...

Tråden skapades och har fått 25 svar. Det senaste inlägget skrevs .
1

Hej,

Är ingen hejare på Applescript, men har efter massor av googlande fått till ett script som gör nästan det jag vill.
Det som återstår att fixa är att skriptet förhindrar omstart och avstängning, vilket jag inte vill.

Skriptet ser ut som nedan, och är sparat som ett program med alternativet "Lämna öppet efter körhanteraren":

repeat    
    set intnt to do shell script "ping -c 1 <server>; echo -n"
    set paras to number of paragraphs in intnt
    if paras < 5 then
    else
        set serverIP to "smb://<server>/<share>"
        set UserAccount to "<username>"
        set ServerPassword to "<password>"
        set serverVolume to "<volumename>"
        tell application "Finder"
            try
                if disk serverVolume exists then
                else
                    with timeout of 10 seconds
                        mount volume serverIP as user name UserAccount with password ServerPassword
                    end timeout
                end if
            end try
        end tell
    end if
    
    delay 901
    
end repeat

Hur får jag skriptet att stänga sig automatiskt om det uppfatar att jag vill göra en omstart eller stänga ner?

Senast redigerat 2012-08-16 09:58
  • Medlem
  • 2012-08-16 11:22
property myIntervalInSeconds : 60


on run
    idle
end run


on idle
    -- din kod
    return myIntervalInSeconds
end idle


on quit
    continue quit
end quit

Så här alltså:

property myIntervalInSeconds : 901


on run
    idle
end run


on idle
    set intnt to do shell script "ping -c 1 <server>; echo -n"
    set paras to number of paragraphs in intnt
    if paras < 5 then
    else
        set serverIP to "smb://<server>/<share>"
        set UserAccount to "<username>"
        set ServerPassword to "<password>"
        set serverVolume to "<volumename>"
        tell application "Finder"
            try
                if disk serverVolume exists then
                else
                    with timeout of 10 seconds
                        mount volume serverIP as user name UserAccount with password ServerPassword
                    end timeout
                end if
            end try
        end tell
    end if
    
    return myIntervalInSeconds
end idle


on quit
    continue quit
end quit
  • Medlem
  • 2012-08-16 11:27

Fast jag läste lit slarvigt. Ovan visas hur du kan stänga av det med cmd+Q, men om det stänger av sig själv vid omstart av daton får du väl testa.

Lysande Baron, skall omgående testas, tror jag får ta och skaffa mig lite bra referensmaterial för AppleScript.

Senast redigerat 2012-08-16 12:33

Fungerade klockrent, tack!

Så här blev det när allt var klart, kanske någon mer som behöver ett skript för detta.

-- Skript för att koppla upp sig mot NAS samt hålla kopplingen vid liv.-- 
-- Sätter alla värden
property myIntervalInSeconds : 901 -- Uppdateringsintervall
property serverProtocol : "smb" -- smb m.m.
property serverIP : "<IP>" -- IP eller DNS namn till servern
property serverVolume : "<SHARE>" -- Share på servern
property UserAccount : "<USERNAME>" -- Användarnamn på servern
property ServerPassword : "<PASSWORD>" -- Lösenord på servern
-- 
-- Då börjar vi!
on run
    idle
end run


on idle
    set intnt to do shell script "ping -c 1 " & serverIP & "; echo -n"
    set paras to number of paragraphs in intnt
    if paras < 5 then
    else
        tell application "Finder"
            try
                if disk serverVolume exists then
                else
                    with timeout of 10 seconds
                        mount volume serverProtocol & "://" & serverIP & "/" & serverVolume as user name UserAccount with password ServerPassword
                    end timeout
                end if
            end try
        end tell
    end if
    
    delay
    return myIntervalInSeconds
end idle


on quit
    continue quit
end quit
Senast redigerat 2012-08-16 12:54
  • Medlem
  • 2012-11-20 19:36

varför måste man välja "Lämna öppet efter körhanteraren" när man sparar scriptet?

förmodar att det är det som gör så att den ligger kvar i dock efter att man kört programmet? hade varit bättre om man slapp se scriptet (så att det bara körs i bakgrunden hela tiden)

  • Medlem
  • 2012-11-21 13:21
Ursprungligen av tqila:

varför måste man välja "Lämna öppet efter körhanteraren" när man sparar scriptet?

Det måste man väl inte? Eller vad menar du?

Jag har haft behov tidigare av att hålla externa enheter vid liv. Då har jag använt Keep Drive Spinning som skapar en s k "launch agent" som sköter detta. Vet ej om det funkar i det här fallet med en SMB share men det kanske kan vara tips till andra som läser tråden i så fall.

Download Keep Drive Spinning for Mac - Makes sure that a connected drive never goes to sleep. MacUpdate.com

  • Medlem
  • 2012-11-21 18:47
Ursprungligen av Gizzmo_SWE:

Skriptet ser ut som nedan, och är sparat som ett program med alternativet "Lämna öppet efter körhanteraren":

tog förgivet att det var så man var tvungen att spara det.

hur sparar man det om man inte vill ha det liggandes i dock/vill köra det i bakgrunden?

för övrigt verkar scriptet inte funka för mig då jag nu sitter och ej är ansluten till smb men har scriptet igång.
dvs jag har varit ansluten men nu tappar anslutningen och den ansluter inte igen automatiskt.

  • Medlem
  • 2012-11-22 17:25

haha, låna kod? nu är det så att jag aldrig tidigare sett ens ett enda tecken applescript-kod, så att jag ska sätta mig och "låna kod" finner jag högst orimligt.

Har du fyllt i dina egna uppgifter, tex username och password, ip till share osv i mitt exempel ovan? Använder detta script sedan jag (med hjälp) skapade det, och har inte haft ett problem sedan dess.

  • Medlem
  • 2012-11-23 16:17
Ursprungligen av tqila:

haha, låna kod? nu är det så att jag aldrig tidigare sett ens ett enda tecken applescript-kod, så att jag ska sätta mig och "låna kod" finner jag högst orimligt.

property myVolumes : {"smb://bilder.abc.de/Bilder/", "afp://filer.fgh.ij/", "smb://10.20.30.40/dir/"}
property myIntervalInSeconds : 60




on run
	idle
end run




on idle
	tell application "Finder"
		repeat with myVolume in myVolumes
			try
				mount volume myVolume
			end try
		end repeat
	end tell
	return myIntervalInSeconds
end idle




on quit
	continue quit
end [B]quit

[/B]

  • Medlem
  • 2012-11-22 20:22

yes, har fyllt i det.

nu verkar det dock fungera som det ska. kanske bara var tillfälligt?
hur lång delay är det från det att den blir disconnectad till att den ansluter igen? kanske bara inte väntade tillräckligt länge (tror jag väntade 5-10min innan jag postade här från att det blev disconnectat och inte anslöt igen)

property myIntervalInSeconds : 901 -- Uppdateringsintervall

901 sekunder, så det måste ha varit något tillfälligt problem.

  • Medlem
  • 2012-11-22 21:12

901 sekunder är 5-10 min längre än tqila väntade, så det kanske funkade hela tiden.

  • Medlem
  • 2012-11-25 14:35

hur/vart ska den in i det första applescriptet jag sparade?

är verkligen inte expert på applescript

  • Medlem
  • 2012-11-25 15:01

Det ersätter det som finns ovan. Klarar sig alltså på egen hand, åstadkommer samma sak men på ett annat sätt.
Det försöker ansluta till de shares som definieras i myVolumes utan att kolla om de redan är tillgängliga. Enkelt och brutalt men fungerande.
Är man renlärig vill man inte blanda in Finder som det här skriptet gör.
Jag använder det för att montera volymer, inte för att hålla anslutningen vid liv.

  • Medlem
  • 2012-11-25 20:11

ok, så när du kör det första scriptet (det för att hålla anslutningen till liv) så har du det liggandes i dock hela tiden? (eftersom det är igång hela tiden när datorn är igång)
är inte det irriterande om man är "renlärig"? då hade iallafall inte jag varit sugen på att fylla upp dock med apple-script ikoner

  • Medlem
  • 2012-11-26 16:32

Som jag sa så kör jag inga skript för att hålla någon alsutning vid liv.
Jag kör bara skriptet jag lånade från till den här tråden.
Jag kör alltså detta: http://www.99mac.se/mac-os-x/296483-automatisk-oppning-fonster-fran-mountade-natverksmappar-vid-inloggning.html när jag vill ansluta, men som regel endast en gång om dagen.

Men oavsett detta har jag skriptet i dockan, men med en egen ikon jag har lånat från något annat nätverksrelaterat sammanhang.
Från vänster till höger: (Finder), Montera volymer, Mata ut volymer, Jämför filer med md5, (Mail).

  • Medlem
  • 2012-12-01 19:09

ok, om man tar gizmos sista script, kan man på något sätt lägga till så den monterar två volymer istället för en som det är nu?

  • Medlem
  • 2012-12-01 20:30
property myIntervalInSeconds : 901 -- Uppdateringsintervall
property myList : {{"smb", "<IP1>", "<SHARE1>", "<USERNAME1>", "<PASSWORD1>"}, {"afp", "<IP2>", "<SHARE2>", "<USERNAME2>", "<PASSWORD2>"}}


-- Då börjar vi!
on run
	idle
end run


on idle
	repeat with theListItem in myList
		set {serverProtocol, serverIP, serverVolume, UserAccount, ServerPassword} to theListItem
		set intnt to do shell script "ping -c 1 " & serverIP & "; echo -n"
		set paras to number of paragraphs in intnt
		if paras < 5 then
		else
			tell application "Finder"
				try
					if disk serverVolume exists then
					else
						with timeout of 10 seconds
							mount volume serverProtocol & "://" & serverIP & "/" & serverVolume as user name UserAccount with password ServerPassword
						end timeout
					end if
				end try
			end tell
		end if
	end repeat
	return myIntervalInSeconds
end idle


on quit
	continue quit
end quit
[B]

[/B]

  • Medlem
  • 2012-12-03 20:37

njae, det där kan inte stämma va?

nu har du ju bara lagt till i property, men själva koden säger ju fortfarande bara "ServerIP" och "ServerPassword", så den kommer väl ändå bara att hålla en anslutning vid liv, och då bara en volym?

ser även att du skrivit afp på den andra mountens info. men är ju smb jag ska använda mig av, är ingen mac som jag delar ut ifrån.

Senast redigerat 2012-12-03 20:56
  • Medlem
  • 2012-12-03 21:03
Ursprungligen av tqila:

njae, det där kan inte stämma va?

nu har du ju bara lagt till i property, men själva koden säger ju fortfarande bara "ServerIP" och "ServerPassword", så den kommer väl ändå bara att hålla en anslutning vid liv, och då bara en volym?

ser även att du skrivit afp på den andra mountens info. men är ju smb jag ska använda mig av, är ingen mac som jag delar ut ifrån.

Jag kan rekommendera gratisprogrammet TextWrangler. Med det kan man jämföra två textdokument och se tecken för tecken var de skiljer sig. Då kommer du att se att jag inte "ju bara lagt till i property".

Ang propertyn myList innehåller ingen av delarna "riktiga" upgifter. Lika lite som jag vet att ditt användarnamn är "<USERNAME2>" vet jag att protokollet är afp. Det är alltså meningen att du ska fylla i dina egna uppgifter där.

  • Medlem
  • 2012-12-04 17:50

jo, fattar att jag ska ändra username osv, trodde dock resten var sådant jag inte skulle röra.

1
Bevaka tråden