Come posso eseguire / fermare / riavviare un'applicazione automaticamente, all'avvio / login / qualche altra volta?

42

Come si fa a eseguire o interrompere l'esecuzione automatica di uno script o di un'applicazione quando si avvia il sistema, quando un utente si collega, in un momento specifico, quando un disco è collegato, ecc.?

    
posta prosseek 08.10.2010 - 15:43
fonte

5 risposte

44

Metodo Gui

Se vuoi che qualcosa venga eseguito quando un utente accede, il modo più semplice è usare la GUI. Puoi

  • Vai alla schermata System Prefs > Accounts > Login Items e aggiungi l'elemento lì
    • facendo clic sul simbolo +
    • trascinamento e rilascio di .app nel riquadro
  • Nel dock, visualizza il menu di scelta rapida per un'app, seleziona Options , quindi seleziona Open at Login

Metodo di avvio

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

  • ad una certa ora o ad un intervallo specificato
  • rilanciato continuamente se si blocca
  • non correlato all'accesso utente
  • come funzione di accesso alla rete
  • viene eseguito solo quando è in esecuzione un altro processo
  • quando un file viene aggiunto a una cartella
  • ecc.

quindi vuoi utilizzare la soluzione tecnica che è launchd .

Il modo più semplice per impostare un file di configurazione launchd è utilizzare uno strumento per aiutare. Al momento di scrivere il metodo più popolare è Lingon (che ha una versione gratuita più vecchia disponibile da SourceForge), o Strumento PList Website .

Codifica manuale

Se non vuoi usare Lingon o il sito web PList e vuoi solo utilizzare gli strumenti raw disponibili sul sistema, puoi scrivere il tuo launchd plist a mano

Ecco il mio script di avvio per eseguire SomeApp continuous dopo l'avvio del sistema (indipendentemente da un accesso dell'utente). Si trova in / System / Library / LaunchAgents / e chiamato SomeApp.restart.plist. Se viene eseguito in base a un accesso utente, potrebbe essere memorizzato 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'opzione RunAtLoad avvierà l'applicazione la prima volta che launchctl esegue questo.
  • L'opzione KeepAlive riavvierà l'applicazione se si blocca.
  • Il StartCalendarInterval lo eseguirà in un determinato momento. Presumibilmente questo è mutuamente esclusivo con i due precedenti, ma è incluso per mostrare cosa si può fare con launchd
  • Launchctl verrà eseguito dopo il riavvio.

Ci sono molte opzioni aggiuntive che puoi trovare sperimentando con Lingon o leggendo le pagine man per launchctl , launchd.plist , plist , launchd.conf , ecc.

    
risposta data 08.10.2010 - 19:39
fonte
8

Lingon funziona ancora. L'ho usato solo la scorsa settimana per creare un "compito programmato". Dopo averlo scaricato, ho dovuto usare il suo auto-aggiornamento per ottenere l'ultima versione ma funziona perfettamente.

    
risposta data 08.10.2010 - 15:53
fonte
7

Se è necessario eseguire solo all'avvio del sistema, usa la scheda Elementi di accesso del pannello delle preferenze di Account. in Preferenze di sistema.

Sesitrattadiunoscript,utilizzaAppleScriptEditorpersalvarlocomeapplicazione.SenonèunoscriptAppleScript,puoicomunqueutilizzareAppleScriptpereseguireloscriptinquestomodo:

doshellscript"your script here"

    
risposta data 08.10.2010 - 18:02
fonte
5

Non dimenticare Loginhooks.

Sebbene corrano come root, dovresti essere in grado di eseguire uno script $ HOME / .loginhook usando qualcosa di simile a questo:

#!/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 solo i comandi che desideri a ~ / .loginhook

Inoltre, anche se 'launchd' è "il modo Mac" crontab è ancora un'opzione perfettamente valida, ed è molto più facile da modificare a mano rispetto ai file launchd XML.

Personalmente, ho pagato felicemente $ 5 per Lingon .

    
risposta data 06.08.2011 - 04:53
fonte
4

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

  1. Crea un nuovo evento in iCal per il tempo in cui desideri che l'app si apra.
  2. In "Alert" seleziona "Apri file", quindi puoi impostare un file da aprire, che ovviamente aprirà anche l'applicazione predefinita per quel tipo di file.
  3. Per aprire un'app, anziché un file, modifica il menu a discesa "iCal" in "Altro ..." e scegli l'app che vuoi 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 vorresti. Per far sì che ciò accada solo su un singolo Mac, devi creare l'evento in un calendario "On My Mac" che puoi fare come segue ...

  1. Nascondi tutti gli altri iCloud o calendari condivisi nella barra a sinistra passando con il mouse sul nome del calendario e facendo clic sul pulsante "nascondi" che verrà visualizzato.
  2. Ora fai clic con il pulsante destro del mouse (o Opzione fai clic se sei un cretino completo e non hai ancora realizzato di avere più di un dito e puoi modificare le preferenze del mouse in modo che sia leggermente più utile del suo mattone di cretino predefinito per stato dei cretini) e scegliere "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 e sono rimasto piacevolmente sorpreso da entrambi i suggerimenti, quindi ho pensato di condividerli qui.

Ho ricevuto le informazioni da queste persone utili qui ... quindi grazie persone! ...

link

    
risposta data 17.09.2013 - 03:13
fonte

Leggi altre domande sui tag