Cron? Launchd? iCal ??
Se é cosi, come?
Cron? Launchd? iCal ??
Se é cosi, come?
Risposte:
Per riferimento, tutte e 3 le opzioni funzionerebbero. L'opzione iCal ha tuttavia più limiti degli altri.
(Esistono GUI per la modifica di cron e launchd, come indicato in altre risposte)
Cron è il più semplice e noto e ci sono molti tutorial disponibili. Coles Notes è quello di aggiungere l'ultima riga dal basso al tuo crontab (modificando /etc/crontab
o usando crontab
dalla riga di comando):
MM HH DD MM WKD -- Minutes, Hour, Day, Month, Weekday (eg. Sun, Mon)
MM HH * * * USERNAME /PATH/TO/SCRIPT
00 3 * * * chealion /myscript.sh "Runs at 03:00 every day"
In Mac OS X, cron
è stato effettivamente sostituito da launchd
ma launchd
è retrocompatibile con il cron
significato che puoi ancora usare cron
ma in realtà launchd
sta facendo tutto il lavoro.
Se si desidera utilizzare, launchd
è necessario controllare anche altre domande qui su Super User: (ad esempio, come eseguire un comando launchd come root? ) Su dove si desidera salvare il file di configurazione (il file plist) come quando funziona dipende dalla directory in cui è memorizzata e da come viene caricata (es. se hai usato sudo o meno) - simile a cron.
Di seguito è riportato un esempio di esecuzione del programma di avvio giornaliero (assicurarsi che il file e l'etichetta siano uguali - meno il programma di installazione per l'etichetta) - questo script viene eseguito ogni giorno a mezzanotte 3 minuti:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>local.IDENTIFIER_HERE.SOMETHING</string>
<key>KeepAlive</key>
<false/>
<key>RunAtLoad</key>
<false/>
<key>UserName</key>
<string>USERNAME HERE</string>
<key>Program</key>
<string>/PATH/TO/SCRIPT</string>
<key>ProgramArguments</key>
<array>
<string>Argument_1</string>
<string>Argument_2</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>00</integer>
<key>Minute</key>
<integer>03</integer>
</dict>
</dict>
</plist>
Vale anche la pena notare che le attività avviate se erano programmate per quando il computer è inattivo o spento, verranno eseguite quando il computer sarà nuovamente disponibile (accendendolo o riattivandolo) - anche se solo una volta, non importa quanti giorni potrebbe avere stato. Modifica: ero appena su un documento Apple che diceva che se la macchina è spenta, durante quel periodo perderai eventuali eventi di avvio (il tuo script non si avvierà all'avvio), (sleep fa partire lo script al risveglio)
Un'altra opzione è usare " at " (controlla la pagina di manuale con "man at"). Lo script può riprogrammare se stesso con es:
echo "sh $0 $@" | at `date +%H:%M` tomorrow
(usa "+ 10 minuti" invece di "domani" per eseguirlo ogni 10 minuti; per interrompere la pianificazione, fai semplicemente "at -l" per elencare gli ID lavoro pianificati e poi "at -r id " per rimuovere il lavoro)
Potrebbe essere necessario avviare prima il demone corrispondente (atrun) con (consultare https://superuser.com/a/43680 ):
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist
Vantaggi: correzione rapida, nessun accesso sudo / root necessario, schemi di pianificazione complicati da eseguire Svantaggi: metodo di pianificazione non standard per OS X (che viene avviato)
launchd
è la strada da percorrere con OS X.
crontab -e
, ti trascinerà in un editor di testo basato su Terminale su un file che diventerà il tuo crontab personale quando lo salvi.
LaunchControl è un'altra GUI per launchd / launchctl. Mentre le alternative citate da altri sono perfettamente in grado di lanciare uno script su base giornaliera, con LaunchControl puoi configurare pianificazioni complesse (come "una volta ogni giorno della settimana, nei fine settimana ogni ora tra le 14:00 e le 20:00"). Inoltre è (AFAIK) l'unico strumento che convalida effettivamente il lavoro. Se un lavoro non funziona come previsto ti mostrerà il perché.
È libero di provare per tutto il tempo che desideri.
cron
se google per questo.Dipende da quello che vuoi: gli script iCal verranno eseguiti solo se hai effettuato l'accesso, cron
esegue lo script senza essere connesso. Non so se iCal esegue uno script se il Mac è stato spento al momento in cui lo script dovrebbe avere stato eseguito. cron
sta facendo questo.
Un aggiornamento: puoi controllare alcune app nell'App Store di Mac OS X che eseguono questa operazione:
Anche Lingon sembra essere disponibile, a seconda del sistema operativo in uso.
Se vuoi provare quello GRATUITO, suggerirei Task Till Dawn
Ecco un'utilità semplice e gratuita per generare XML plist:
http://www.gieson.com/Library/projects/utilities/launcha/
Con questo programma di utilità non è necessario installare un programma, è sufficiente salvare i risultati nella cartella Libreria / LaunchAgents.
RunAtStart
sia impostato su false (a meno che non lo si desideri vero). Ho impiegato un'ora a capire perché il mio Finder si sarebbe bloccato e avrebbe impedito il caricamento del desktop all'avvio. La disabilitazione RunAtStart
non interferisce con la pianificazione fissa.
Uso sempre Lingon per questo, ma sembra che sia fuori sviluppo. Potresti provare Crontooie , ma non l'ho mai usato personalmente. O semplicemente modifica il file crontab nel terminale.
sp@mactop ~ $ crontab -l
*/5 * * * * /usr/local/bin/cinco.sh
sp@mactop ~ $ cat /usr/local/bin/cinco.sh
#!/bin/sh
....cut....
sp@mactop ~ $
... qualunque riga di comando passi per ".... tagliare ...." verrà eseguita ogni cinque minuti.
30 anni di progressi e "cron" è ancora il mio programmatore preferito.
-C
Se un evento di calendario soddisfa le tue esigenze, l'applicazione Automator integrata ti consente anche di creare allarmi di calendario attivati da eventi di calendario. È possibile utilizzare alcune delle azioni basate sull'interfaccia utente incorporate per fare ciò che si desidera, oppure è anche possibile che esegua un'applicazione o uno script AppleScript, JavaScript o shell personalizzato.