Perché non riesco a eseguire il mio script di avvio all'accesso?

1

Sto usando OS X Yosemite. Sto cercando di eseguire uno sh script al momento dell'accesso, ma sto avendo problemi. Ho creato il seguente file nella mia directory / Library / LaunchAgents ...

-rwxr-xr-x  1 root  wheel  604 Oct 19 09:24 eXist.plist

I contenuti del file sono i seguenti:

<?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>eXist</string>
        <key>Program</key>
        <string>/Applications/eXist-db/bin/startup.sh</string>
        <key>RunAtLoad</key>
        <true/>
        <key>UserName</key>
        <string>root</string>
        <key>StandardErorPath</key>
        <String>/tmp/eXistDB.err</string>
        <key>StandardOutputPath</key>
        <string>/tmp/eXistDB.out</string>
    </dict>
</plist>

Tuttavia, non viene eseguito nulla (almeno non vengono generati file di output) e non riesco a capire perché. Ho verificato che il percorso esiste. Come posso far funzionare il mio script all'accesso?

Modifica

Per dimostrare che il percorso esiste, ecco l'output quando provi il percorso nello script rispetto a ciò che è stato suggerito ...

Daves-MacBook-Pro-2:~ davea$ ls /Applications/eXist-db/bin/startup.sh 
/Applications/eXist-db/bin/startup.sh
Daves-MacBook-Pro-2:~ davea$ ls /Applications/eXist-db.app/Contents/Resources/eXist-db/bin/startup.sh
ls: /Applications/eXist-db.app/Contents/Resources/eXist-db/bin/startup.sh: No such file or directory
    
posta Dave 19.10.2015 - 16:39
fonte

2 risposte

1

Hai commesso alcuni errori nel tuo plist:

  • /Applications/eXist-db/bin/startup.sh probabilmente non esiste se hai installato eXist-db 2.2

    Un percorso valido è /Applications/eXist-db.app/Contents/Resources/eXist-db/bin/startup.sh

  • StandardErorPath e StandardOutputPath non sono chiavi valide

    Le chiavi valide sono StandardErrorPath e StandardOutPath

  • probabilmente la radice < - > problema di launchd già affrontato da patrix

  • il plist non deve essere eseguibile

Per avviare l'app dopo aver effettuato l'accesso con il tuo utente, è sufficiente aggiungerla a Preferenze di sistema - > Utenti e amp; Gruppi - > Il tuo utente - > Elementi di login

Per avviare eXist-db 2.0 al momento dell'avvio e al molo dopo aver effettuato l'accesso al tuo utente devi fare quanto segue:

Se non lo hai già fatto, prima inserisci:

sudo /Applications/eXist-db/tools/wrapper/bin/exist.sh install

per installare un LaunchDaemon org.tanukisoftware.wrapper.eXist-db.plist in / Library / LaunchDaemons /. Se vuoi aggiungere uno StandardErrorPath e StandardOutPath, modifica il file con sudo nano /Library/LaunchDaemons/org.tanukisoftware.wrapper.eXist-db.plist .

Dovrebbe assomigliare a questo alla fine:

<?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>Disabled</key>
    <true/>
    <key>Label</key>
    <string>org.tanukisoftware.wrapper.eXist-db</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Applications/eXist-db/tools/wrapper/bin/exist.sh</string>
        <string>launchdinternal</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/tmp/org.tanukisoftware.wrapper.eXist-db.stderr</string>
    <key>StandardOutPath</key>
    <string>/tmp/org.tanukisoftware.wrapper.eXist-db.stdout</string>
</dict>
</plist>

Carica il daemon permanentemente con:

sudo launchctl load -w /Library/LaunchDaemons/org.tanukisoftware.wrapper.eXist-db.plist 

Ora crea un secondo file in ~ / Library / LaunchDaemons / named com.eXist.plist con nano. Dovrebbe assomigliare a questo alla fine:

<?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.eXist</string>
    <key>Program</key>
    <string>/Applications/eXist-db/bin/startup.sh</string>
    <key>RunAtLoad</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/tmp/com.eXist.stderr</string>
    <key>StandardOutPath</key>
    <string>/tmp/com.eXist.stdout</string>
</dict>
</plist>

È stato aggiunto StandardErrorPath e StandardOutPath.

Carica l'agente in modo permanente con:

launchctl load -w ~/Library/LaunchAgents/com.eXist.plist

Fatto.

Non dimenticare di impostare correttamente la tua (o la) variabile JAVA_HOME. Se si utilizza una versione più recente di eXist-db (ad es. 2.2) è necessario aggiungere almeno / Contents / Resources / ai percorsi di exist.sh e startup.sh nel plist (controllare i percorsi appropriati aprendo il pacchetto dell'app.

Suggerimento: non usare TextEdit per modificare i plists: altrimenti i file plist potrebbero essere malformati.

    
risposta data 19.10.2015 - 19:43
fonte
0

Non puoi avviare roba come utente root dalla tua cartella personale LaunchAgents in quanto ciò creerebbe un buco di sicurezza piuttosto grande. Dovrebbe esserci un messaggio a riguardo in /var/log/system.log .

Da man launchd.plist :

UserName string

This optional key specifies the user to run the job as. This key is only applicable when launchd is running as root.

    
risposta data 19.10.2015 - 17:26
fonte

Leggi altre domande sui tag