2009-09-03 13 views
26

Sto cercando di capire perché il mio script launchd non funziona. È estremamente semplice, ma io sono nuovo nell'ambiente mac e sto cercando di abituarmi. Ecco il mio plist. So che è richiesto ProgramArguments, quindi ho appena inserito il percorso dello script.MOLTO semplice Launchd plist non esegue il mio script

<?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.tomcat.plist</string> 
    <key>ProgramArguments</key> 
    <array> 
    <string>/opt/apache-tomcat-5.5.27/bin/startup.sh</string> 
    </array> 
    <key>OnDemand</key> 
    <false/> 
</dict> 
</plist> 

Quando provo a fare funzionare launchctl load <name> sembra caricare correttamente (nel senso che non mi dà alcun messaggio di errore), ma lo script non sembra essere in esecuzione, anche al riavvio.

Ho utilizzato tutti gli esempi che ho trovato online e non riesco a capire perché questo non stia eseguendo il mio script all'avvio.

risposta

13

Per rendere lo script viene eseguito automaticamente quando si chiama carico launchctl, è necessario aggiungere: -

<key>RunAtLoad</key> 
<true/> 

In alternativa è possibile utilizzare: -

launchctl start com.tomcat.plist 
36

Solo nel caso qualcuno altro corre attraverso questo problema, e ha già <key>RunAtLoad</key><true/> nel loro plist, voglio fornire alcune soluzioni aggiuntive.

permessi doppio controllo per assicurarsi che lo script sia eseguibile (cercare una 'x'):

ls -l /opt/apache-tomcat-5.5.27/bin/startup.sh 

autorizzazioni Modifica se necessario:

chmod +x /opt/apache-tomcat-5.5.27/bin/startup.sh 

anche eseguire lo script direttamente prima e assicurarsi che funzioni:

/opt/apache-tomcat-5.5.27/bin/startup.sh 

Se lo script è eseguibile e funziona correttamente, provare tailing il registro di sistema per eseguire il debug launchd:

sudo launchctl log level debug 
tail -f /var/log/system.log 

Il -f bandiera (in pratica) mostra continuamente la fine (tutte le voci) del registro. È possibile rimuovere questo flag per stampare semplicemente un'istantanea della fine del log. Se si utilizza questo flag, sarà necessario aprire un nuovo terminale per eseguire altri comandi. Premere CTRL + C per terminare la sessione di coda. Per maggiori informazioni: debug

man tail 

Al termine:

sudo launchctl log level error 

Non ci sono altri livelli di log. Per ulteriori informazioni:

man launchctl 

Se si apportano modifiche allo script o plist, assicurarsi di ricaricare il plist.Per esempio:

launchctl unload ~/Library/LaunchAgents/com.tomcat.plist 
launchctl load ~/Library/LaunchAgents/com.tomcat.plist 

Se fatto solo modifiche allo script e NON il plist, si può semplicemente riavviare il plist:

launchctl stop com.tomcat.plist 
launchctl start com.tomcat.plist 

Se si aggiunge il seguente valore-chiave per il vostro plist:

<key>KeepAlive</key> 
<true/> 

Poi si può solo eseguire:

launchctl stop com.tomcat.plist 

E si riavvierà automaticamente.

Se nessuna di queste soluzioni è utile e si riscontrano problemi con la configurazione di Tomcat su OS X, potrebbe essere utile fare riferimento a this tutorial.

+0

avendo lo stesso problema con uno script di test che ho scritto ... i comandi launchctl 'start' e 'stop' restituiscono l'errore "No such process" – Michael

+2

@Michael 'start' e' stop' prendono un'etichetta come argomento non il nome del file. Nell'esempio sopra, la configurazione ha ' com.tomcat.plist' ma è probabile che il tuo abbia solo 'com.tomcat' quindi' launchctl start com.tomcat' dovrebbe funzionare. –

+7

adorabile. "errore di livello log sudo launchctl" non è più implementato. – Michael

Problemi correlati