Come si fa a eseguire o interrompere l'esecuzione automatica di uno script o di un'app quando si avvia il sistema, un utente accede, in un momento specifico, quando è collegato un disco, ecc.?
Come si fa a eseguire o interrompere l'esecuzione automatica di uno script o di un'app quando si avvia il sistema, un utente accede, in un momento specifico, quando è collegato un disco, ecc.?
Risposte:
Se si desidera eseguire qualcosa quando un utente accede, il modo più semplice è utilizzare la GUI. Puoi
System Prefs > Accounts > Login Items
schermo e aggiungi l'elemento lì
+
simbolo.app
sul riquadroOptions
, quindi selezionaOpen at Login
Se vuoi lanciare qualcosa che non è un .app
, o vuoi avere un maggiore controllo sul lancio, come:
allora vuoi usare la soluzione tecnica che è launchd
.
Il modo più semplice per impostare un launchd
file di configurazione è utilizzare uno strumento di aiuto. Al momento in cui scrivo, il metodo più popolare è Lingon (che ha una versione gratuita precedente disponibile da SourceForge), o lo strumento del sito Web PList .
Se non si desidera utilizzare Lingon o il sito Web PList e si desidera utilizzare solo gli strumenti non elaborati disponibili sul sistema, è possibile scrivere launchd
plist
manualmente
Ecco il mio script di avvio per eseguire SomeApp continuamente dopo l' avvio del sistema (indipendentemente dall'accesso di un utente). È in / Sistema / Libreria / LaunchAgents / e chiamato SomeApp.restart.plist. Se viene eseguito in base a un accesso utente, potrebbe essere archiviato in ~ / Library / LaunchAgents /
<?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>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>SomeApp.restart</string>
<key>ProgramArguments</key>
<array>
<string>/path/to/SomeApp.app/Contents/MacOS/SomeApp</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>5</integer>
<key>Minute</key>
<integer>10</integer>
</dict>
</dict>
</plist>
Caricalo una volta con
launchctl load ~/Library/LaunchAgents/SomeApp.restart.plist
RunAtLoad
opzione avvia l'applicazione la prima volta che launchctl esegue questo.KeepAlive
opzione riavvia l'applicazione in caso di arresto anomalo.StartCalendarInterval
eseguiranno in un determinato momento. Presumibilmente questo si esclude a vicenda con i due precedenti, ma è incluso per mostrare cosa si può farelaunchd
Ci sono molte opzioni aggiuntive che possono essere trovati con la sperimentazione di Lingon o leggendo le pagine man per launchctl
, launchd.plist
, plist
, launchd.conf
, etc.
launchctl load -w ...
per rendere persistente la modifica. Sulla base del tuo feedback ho aggiornato il mio script configuratore poweruser OSX
Lingon funziona ancora. L'ho usato solo la scorsa settimana per creare un "compito programmato". Dopo averlo scaricato, ho dovuto utilizzare il suo aggiornamento automatico per ottenere l'ultima versione, ma funziona benissimo.
Se è necessario eseguirlo solo all'avvio del sistema, utilizzare la scheda Elementi di accesso nel riquadro delle preferenze Account nelle Preferenze di sistema.
Se si tratta di uno script, utilizzare AppleScript Editor per salvarlo come applicazione. Se non è uno script AppleScript, puoi comunque utilizzare AppleScript per eseguire lo script in questo modo:
do shell script "your script here"
Non dimenticare Loginhooks.
Sebbene funzionino come root, dovresti riuscire a farlo eseguire uno script $ HOME / .loginhook usando qualcosa del genere:
#!/bin/sh
home=`eval echo ~$user`
if [ -x "$home/.loginhook" ]; then
logger -t $0 "executing .loginhook of user $user"
su - $user -c "$home/.loginhook"
fi
Quindi aggiungi semplicemente i comandi che vuoi al ~ / .loginhook
Inoltre, sebbene 'launchd' sia "il modo Mac" crontab è ancora un'opzione perfettamente praticabile, ed è molto più facile da modificare a mano rispetto ai file launchd XML.
Personalmente, ho felicemente pagato $ 5 per Lingon .
/path/to/script
, e sudo defaults write com.apple.loginwindow LoginHook /path/to/script
? E il punto nell'esecuzione di uno script nella home directory è che ogni utente può avere un personalizzato (o no) ~/.loginhook
?
L'esecuzione di un'app in un determinato momento può essere eseguita facilmente in iCal, come ho appena scoperto grazie a un altro forum!
Una cosa da tenere presente è che se hai più Mac che condividono contenuti su iCloud, questo evento verrà eseguito anche su quelle app, che potresti o non vuoi. Affinché ciò avvenga solo su un singolo Mac, devi creare l'evento in un calendario "Sul mio Mac" che puoi fare come segue ...
L'ho appena scoperto da solo, ed è stato piacevolmente sorpreso da entrambi i suggerimenti, quindi ho pensato di condividerli qui.
Ho ricevuto le informazioni da queste persone utili qui ... quindi grazie gente! ...
http://osxdaily.com/2013/04/15/launch-file-app-scheduled-date-mac-os-x/