Come posso eseguire / arrestare / riavviare un'applicazione automaticamente, all'avvio / accesso / un'altra volta?


42

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.?


3
Lingon è solo un'app per rendere la creazione dei file .plist per launchd più intuitiva. Anche qualcuno ha creato un creatore di plist di lancio basato sul web: plist.spotmac.de
Chealion,

Boo! plist.spotmac.de sembra essere sparito. :-(
docwhat

Risposte:


44

Metodo Gui

Se si desidera eseguire qualcosa quando un utente accede, il modo più semplice è utilizzare la GUI. Puoi

  • Vai allo System Prefs > Accounts > Login Itemsschermo e aggiungi l'elemento lì
    • facendo clic sul +simbolo
    • trascinando .appsul riquadro
  • Nel dock, apri il menu di scelta rapida di un'app, seleziona Options, quindi selezionaOpen at Login

Metodo di avvio

Se vuoi lanciare qualcosa che non è un .app, o vuoi avere un maggiore controllo sul lancio, come:

  • in un determinato momento o ad un intervallo specificato
  • rilancio continuo in caso di crash
  • non correlato al login dell'utente
  • in funzione dell'accesso alla rete
  • eseguito solo quando è in esecuzione un altro processo
  • quando un file viene aggiunto a una cartella
  • eccetera.

allora vuoi usare la soluzione tecnica che è launchd.

Il modo più semplice per impostare un launchdfile 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 .

Codifica manuale

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 plistmanualmente

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
  • L' RunAtLoadopzione avvia l'applicazione la prima volta che launchctl esegue questo.
  • L' KeepAliveopzione riavvia l'applicazione in caso di arresto anomalo.
  • Lo StartCalendarIntervaleseguiranno in un determinato momento. Presumibilmente questo si esclude a vicenda con i due precedenti, ma è incluso per mostrare cosa si può farelaunchd
  • Launchctl eseguirà questo dopo il riavvio.

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.


Grazie, davvero utile. È inoltre possibile utilizzare launchctl load -w ...per rendere persistente la modifica. Sulla base del tuo feedback ho aggiornato il mio script configuratore poweruser OSX
sorin

8

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.


1
Anche Lingon è ora su App Store
user151019

1
Ma per trovare la versione gratuita e open source devi estrarla da Sourceforge. Anche l'ultima versione commerciale non funziona su Leopard (10.5). Ma 2.1.1

7

Se è necessario eseguirlo solo all'avvio del sistema, utilizzare la scheda Elementi di accesso nel riquadro delle preferenze Account nelle Preferenze di sistema.

testo alternativo

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"


Eh? Sei sicuro di questo ? Dice nell'interfaccia utente del tuo screenshot "Questi elementi si apriranno automaticamente quando accedi" - non è diverso da quando il sistema si avvia? Inoltre, il tuo link sembra 404.
ssc,

5

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 .


Quindi lo script nel blocco di codice dovrebbe essere salvato come /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?
Lri,

@Lri - sì, appunto. Mi dispiace che non sia stato più chiaro. Il codice di blocco potrebbe essere /usr/local/bin/loginhook.sh e, poiché è eseguito da root, cercherà $ HOME / .loginhook quando un utente accederà ed eseguirà tale utente.
TJ Luoma,

4

L'esecuzione di un'app in un determinato momento può essere eseguita facilmente in iCal, come ho appena scoperto grazie a un altro forum!

  1. Crea un nuovo evento in iCal per il momento in cui desideri aprire l'app.
  2. In "Avviso" scegli "Apri file", quindi puoi impostare un file da aprire, che ovviamente aprirà anche l'applicazione predefinita per quel tipo di file.
  3. Per aprire semplicemente un'app, anziché un file, modifica il menu a discesa "iCal" in "Altro ..." e scegli l'app che desideri eseguire!

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 ...

  1. Nascondi tutti gli altri calendari iCloud o condivisi sulla barra di sinistra passando con il mouse sul nome del calendario e facendo clic sul pulsante "nascondi" che verrà visualizzato.
  2. Ora fai clic destro (o Opzione fai clic se sei un cretino completo e ancora non ti sei reso conto di avere più di un dito e puoi modificare le tue preferenze del mouse in modo che sia leggermente più utile del suo stato predefinito "mattone cretinoso per cretini" ) e selezionare "Nuovo calendario".
  3. Poiché tutti i calendari condivisi sono nascosti, questo nuovo calendario verrà creato come "Sul mio Mac" e sarà locale per questo Mac.

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/

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.