xeric Postad 12 november, 2013 Share Postad 12 november, 2013 Cron och LaunchdTänkte skriva lite om Cron och Launchd, och hur man kan använda dem. Båda hanterar och gör s k schemalagda processer. Cron har funnits länge och används (i viss mån) än idag, men för rätt många systemversioner sen gick OS X över till en egen variant av cron: launchd (launchctl). Det mesta ligger där idag och används till olika ändamål, som olika tjänster, startobjekt osv. Mycket av allt som "körs".På Mac'en rullar det som oftast på av sig själv, allt som görs/kör och som man vill ha gjort. Men ibland kan det vara bra att kunna lägga till lite eget om man vill (och tycker det är lite kul). - - -Skriver i separata inlägg, så det inte blir ett enda långt av allt.Cron (crontab)Launchd (launchctl)Exempel Länk till kommentar Dela på andra webbplatser More sharing options...
xeric Postad 12 november, 2013 Författare Share Postad 12 november, 2013 Cron (crontab)Som sagt - "cron" används inte så mkt idag på Mac'en så jag skall inte skriva så mkt om det mer än lite hur det funkar, och som jämförelse. Cron är bra, men kan vara lite svårt. Själv tycker jag launchd är bättre till vardags, men cron har en fördel att man kan ställa in mer exakta och mer komplicerade tidsintervall, även om man kan ställa in en hel del med launchd också. Men men...Själva upplägget (syntaxen) ser ut såhär: Minut Timme Datum Månad Veckodag Kommando Exempel, utan några värden: * * * * * say Hej Varje minut säger datorn: HejFör att köra med olika intervaller kan det set ut såhär: # var 10'e minut */10 * * * * say Hej # Varje Måndag och Fredag klockan 12 * 12 * * Mon,Fri say Hej Den sista, själva kommandot kan lika gärnma vara en fil eller ett shellscript som körs. * * * * * /Users/Namn/ShellScripts/exempel.sh För att lägga in använder man crontab. crontab -e Sen skriver man in sin(a) rad(er) med kod.För att läsa vad som finns där... crontab -l Även kolla andra användares crontab crontab -u Sven-Allers -l Att ta bort aktuell crontab crontab -r Sen kan man göra mkt mer, och ställa in olika saker, ange mailadress så man få notis via mail osv. Och det finns även lite specialtaggar (@yearly, @montly osv). Men som sagt, cron används inte så mkt idag på Mac'en, så om man inte har några jobbigt knepiga grejjer och körscheman så är launchd mkt bättre och enklare. Framförallt har man bättre koll på allt eftersom det jobbar med separata filer.Resurser: cron(8) crontab(1)• Linux Crontab: 15 Awesome Cron Job Examples Länk till kommentar Dela på andra webbplatser More sharing options...
xeric Postad 12 november, 2013 Författare Share Postad 12 november, 2013 Launchd (launchctl)OS X egna variant på cron kan man säga. Den startar och kör olika saker, tjänster osv. Fördelen med launchd är att det är lätt att starta/stoppa ändra i filerna. Och filerna är uppbyggda lite på samma sätt som ".plist" ... dvs med XML.Vad man kan göra med det är t ex att göra egna startup-script, egen loggning av något, eller köra egna script som t ex städar/rensar nåt på datorn. Precis som man kan schemalägga aktiviteter i CCC (Carbon Copy Cloner) kanske man har ett eget skript man vill köra nåt annat.För att göra egna, kan man lätt skriva en själv (lägger med en exempelfil i slutet), eller använda program som "Lingon". Lingon finns på AppStore, och kostar väl ngn krona, Finns också en äldre version (2.1.1) som ligger på SourceForge och som inte kostade något. Är den jag kör med. Lingon 3 Lingon 2 (10.6.8)• Lingon 2.1.1Lingon 2.1.1 är den jag kör. Funkar bra på Lion, och förmodligen på senare med.Filerna läggs (kan läggas) i mappen "LaunchAgents". De finns på 3 ställen i datorn. ~/Library/LaunchAgents /Library/LaunchAgents /System/Library/LaunchAgents Är bra att skilja dem åt. Den första är för användare. I den andra kan man lägga filer som skall/kan köras på alla användare och den sista ligger det som systemet kör. Där bör man inte lägga några "egna".Så om man går igenom en fil lite grann."Skalet". Såsom alla filer börjar och slutar. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> // innehåll </dict> </plist> Nu kan man fylla det med olika innehåll.Hela plist-uppbyggnaden består oftast av ett namn och ett värde (ibland flera värden). <key> och <value>I Label anger man samma som filen heter, minus ".plist". <key>Label</key> <string>com.namn.exempel</string> ProgramArguments.Här kan man ange/dela upp olika saker, men om man kör ett script ser det ut såhär: <key>ProgramArguments</key> <array> <string>/Users/Namn/ShellScripts/exempelscript.sh</string> </array> Om man kör ett kommando direkt i filen, som i cron-exemplen, akn det se ut såhär istället: <key>ProgramArguments</key> <array> <string>/usr/bin/open</string> <string>-a</string> <string>TextEdit</string> </array> Sökvägen till programmet som kör.Ev "handlers" (eg -a)osv...Vilket i Terminalen skulle skrivas: open -a TextEditKöras vid uppstart? (true, false) <key>RunAtLoad</key> <true/> Intervall, i sekunder. (3600 = 1 tim) <key>StartInterval</key> <integer>3600</integer> Som alternativ kan man köra med "StartCalendarInterval" för att specificera andra intervall. <key>StartCalendarInterval</key> <dict> <key>Hour</key> <integer>3</integer> <key>Minute</key> <integer>15</integer> </dict> Sen finns ett par fler med bland annat för Output och Errors. <key>StandardErrorPath</key> <string>/sökväg/till/errorfil.log</string> <key>StandardOutPath</key> <string>/sökväg/till/loggfil.log</string> Även Disabled kan man ange (true, false) <key>Disabled</key> <true/> För att manuellt starta och stoppa dem. launchctl load -w /sökväg/till/skriptet/com.exempel.plist launchctl unload -w /sökväg/till/skriptet/com.exempel.plist Annars går det att starta om bara efter att man har ändrat "Disabled" och "RunAtLoad" i filerna.- - -Ett färdigt exempel kan se ut så här: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.namn.exempel</string> <key>ProgramArguments</key> <array> <string>/Users/Namn/ShellScripts/mittskript.sh</string> </array> <key>RunAtLoad</key> <true/> <key>StartInterval</key> <integer>3600</integer> </dict> </plist> Filen heter: com.namn.exempel.plistLigger i: /Users/Library/LaunchAgents/com.namn.exempel.plist...och kör scriptet: /Users/Namn/ShellScripts/mittskript.sh varje timma.Viktigt med alla program och sökvägar till filer är att man skriver hela sökvägen.I terminalen kanske man skriver en förkortad variant med "~/foo/bar" osv. Men här, skriv ut hela!Exempel kommer nedanför...Resurser: launchd(8) launchctl(1)• Mac crontab - Mac OS X startup jobs with crontab, er, launchd• Logging with launchd• Mac launchd and launchctl — the OSX alternative to cron• Cron and launchctl on Mac OS X 10.5 Leopard Länk till kommentar Dela på andra webbplatser More sharing options...
xeric Postad 12 november, 2013 Författare Share Postad 12 november, 2013 Exempel 1För att göra 2 enkla exempel - 1 som körs vid uppstart (en gång) och ett som körs varje timme. Mest för att visa exemplen i sin helhet, och om man vill testa lite.[!] Sökvägar och namn är bara exempel, och måste justeras till dina egna namn/användarnamn osv.I en textredigerare - gärna ngn bättre än TextEdit, t ex TextWrangler. Först skapar vi 2st s k shellscript.maint_hourly.shmaint_startup.shSpara dem t ex i en mapp som heter ShellScripts i hemfoldern.~/ShellScripts/maint_hourly.sh #!/bin/sh # # Underhållsskript som körs varje timma. # # Rensa den gömda nerladdningshistoriken sqlite3 ~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV* 'delete from LSQuarantineEvent'; # Debug/Log echo " · Hourly: $0 - `date`" >> $HOME/ShellScripts/__debug.txt I exemplet så rensas listan där Apple sparar allt man laddar ner, även om man tömt sina nerladdningslistor i Safari osv. Brukar finnas en hel del där (som tydligen sparas av ngn märklig anledning).Den andra lägger till en texrad när skriptet kördes. T ex:· Hourly: /Users/Namn/ShellScripts/maint_hourly.sh - Tue Nov 12 03:20:42 CET 2013~/ShellScripts/maint_startup.sh #!/bin/sh # # Underhållsskript som körs varje gång datorn startas upp. # # Rensa Drobox Cache'n rm -rf $HOME/Dropbox/.dropbox.cache/*; # Säg Hej say Welcome $USER; # Debug/Log echo "[Startup] $0 - `date`" >> $HOME/ShellScripts/__debug.txt I den här filen töms DropBox cache, säger hej och lägger till en rad i (samma) loggfil:[startup] /Users/Namn/ShellScripts/maint_startup.sh - Mon Nov 11 20:20:46 CET 2013För att kunna köra dem måste de ha rättigheter till det. I Terminal kör: chmod u+x ~/ShellScripts/maint_hourly.sh chmod u+x ~/ShellScripts/maint_startup.sh Sen kommer man då till våra "LaunchAgents". Skapa 2 st filer. (Här går det bra med TextEdit).com.dittnamn.hourly.plistcom.dittnamn.startup.plistSpara dem i ~/Library/LaunchAgents~/Library/LaunchAgents/com.dittnamn.hourly.plist <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.dittnamn.hourly</string> <key>ProgramArguments</key> <array> <string>/Users/Namn/ShellScripts/maint_hourly.sh</string> </array> <key>RunAtLoad</key> <true/> <key>StartInterval</key> <integer>3600</integer> </dict> </plist> Nästa...~/Library/LaunchAgents/com.dittnamn.startup.plist <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.dittnamn.startup</string> <key>ProgramArguments</key> <array> <string>/Users/Namn/ShellScripts/maint_startup.sh</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist> Sen laddar man in dem. launchctl load -w /Users/Namn/Library/LaunchAgents/com.dittnamn.hourly.plist launchctl load -w /Users/Namn/Library/LaunchAgents/com.dittnamn.startup.plist Starta man om nu så här man en röst säga välkommen (är med där mest för att kolla så det funkar)Om man kikar i filen ~ShellScripts/__debug.txt skall det finnas en rad där nu.Till ett annat exempel om man t e x lägger filen i "/Library/LaunchAgents" så den körs på alla användare, så kan man ju ha lite koll på familjen om/när den loggat in på datorn. Kan ju vara bra till "ungar" som säger att dem gjort skolläxorna hela tiden ... så kan man se om de varit inne på datorn istället. Ett exempel tillGöra ett eget startup-skript till Safari. Normalt kan man ju få Safari att starta upp vid uppstart och har man angett en startsida så kommer den upp, såklart.Här är ett exempel jag hittade som just drar nytta av det här med egna skript. Och med lite hjälp av ett "applescript" så kan man öppna Safari med NN sidor som laddas in i flikar, istället för lika många fönster. Först ett litet AppleScript: on run argv tell front window of application "Safari" set newTab to make new tab set the URL of newTab to item 1 of argv set the current tab to newTab end tell end run Spara i/som: ~/ShellScripts/loadSafari.scptSen shellscriptet som skall köras: #!/bin/bash # # Skript som öppnar {NN} sidor i Safari # function saf { osascript $HOME/ShellScripts/loadSafari.scpt $1 } # Först ladda en sida (resten laddas efteråt) open -a Safari "http://forum.macworld.se/" saf http://www.svd.se/ saf http://www.dn.se/ saf http://www.expressen.se/ saf http://www.aftonbladet.se/ # fyll på med fler ... Spara i/som: ~/ShellScripts/loadSafari.shOch för att göra en "LaunchAgent" till det, så det startas vid uppstart... <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.dittnamn.loadSafari</string> <key>ProgramArguments</key> <array> <string>/Users/Namn/ShellScripts/loadSafari.sh</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist> Spara i/som: ~/Library/LaunchAgents/com.dittnamn.loadSafari.plistKör i Terminal: chmod u+x ~/ShellScripts/loadSafari.sh launchctl load -w ~/Library/LaunchAgents/com.dittnamn.loadSafari.plist Starta om. Skall fixa till färdiga filer/exempel och lägga i en zipfil (kommer sen).- - -Sorry, om allt blev väldigt långt. Man får läsa och kolla i portioner. (Det ser mer ut än vad det är). Vill man ha tips/idéer på hur man mer kan skriva/göra, så kolla i OS X egna filer, hur det har gjort och hur de formaterat osv... Länk till kommentar Dela på andra webbplatser More sharing options...
xeric Postad 13 november, 2013 Författare Share Postad 13 november, 2013 Skall fixa till färdiga filer/exempel och lägga i en zipfil (kommer sen). Färdiga exempel/filer för inlägget ovan. Det står med i textfilerna om var/vilka filer som behöver editeras osv. CronLunchdExempel.zip Länk till kommentar Dela på andra webbplatser More sharing options...
Alix Postad 13 november, 2013 Share Postad 13 november, 2013 Toppeninitiativ, iEricF! Jag har lärt mig massor. Länk till kommentar Dela på andra webbplatser More sharing options...
xeric Postad 13 november, 2013 Författare Share Postad 13 november, 2013 [+] Tack! Va kul! Länk till kommentar Dela på andra webbplatser More sharing options...
Alix Postad 13 november, 2013 Share Postad 13 november, 2013 Jag tänker lägga in det som rensar nedladdningshistorik vid uppstart. Länk till kommentar Dela på andra webbplatser More sharing options...
xeric Postad 27 juni, 2016 Författare Share Postad 27 juni, 2016 Här var en jättebra sida/guide till launchd: A launchd Tutorial Även den här pdf'en var matnyttig: https://www.usenix.org/legacy/event/lisa10/tech/slides/bass.pdf Länk till kommentar Dela på andra webbplatser More sharing options...
Rekommendera Poster
Arkiverat
Det här ämnet är nu arkiverat och är stängt för ytterligare svar.