Impossibile uscire dall'app lanciata tramite launchd

4

Come si legge nel titolo, "Impossibile uscire dall'app lanciata tramite launchd" -o più precisamente, posso lasciarlo, ma poi si riavvia automaticamente.

Sfondo : preferisco usare BusyCal, non iCal, ma ci sono alcune cose di calendario che devono essere fatte da iCal prima che BusyCal possa ottenere i risultati. Ho pensato di creare due script di avvio: uno per lanciare iCal ogni giorno alle 5 del mattino e un altro per chiuderlo pochi minuti dopo.

Ecco i plist da avviare (in ~/Library/LaunchAgents/com.dori.iCalLaunch.plist ):

<?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>KeepAlive</key>
    <false/>
    <key>Label</key>
    <string>com.dori.iCalLaunch</string>
    <key>OnDemand</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
        <string>/Applications/iCal.app/Contents/MacOS/iCal</string>
    </array>
    <key>ServiceDescription</key>
    <string>iCal Launcher</string>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>5</integer>
    </dict>
</dict>
</plist>

Ho capito che non avevo bisogno delle chiavi KeepAlive e OnDemand , ma le ho comunque inserite per cercare di fermare il rilancio.

Ecco i plist da chiudere (in ~/Library/LaunchAgents/com.dori.iCalQuit.plist ):

<?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.dori.iCalQuit</string>
    <key>Program</key>
    <string>/usr/bin/osascript</string>
    <key>ProgramArguments</key>
    <array>
        <string>osascript</string>
        <string>-e</string>
        <string>tell application "iCal" to quit</string>
    </array>
    <key>ServiceDescription</key>
    <string>iCal Quitter</string>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>5</integer>
        <key>Minute</key>
        <integer>10</integer>
    </dict>
</dict>
</plist>

In base ai miei file di registro, entrambi funzionano bene, ma dopo che Quit è stato eseguito, iCal si rilancia.

Qualche idea per cose da provare o cose che potrebbero causare questo?

    
posta Dori 17.03.2011 - 23:43
fonte

3 risposte

2

Se non specifichi <Minute> in <StartCalendarInterval> , allora (proprio come cron 's * ) eseguirà il lavoro ogni minuto.

    
risposta data 17.03.2011 - 23:57
fonte
1

Una risposta a questo problema è leggermente controintuitiva.

Semplifica il tuo file plist di iCal e fai girare iCal per sempre impostando OnDemand su false . Ecco un file che ho provato memorizzandolo come ~/Library/DontLaunchAgents/com.dori.iCalForever.plist - non lasciare questo file in nessuna directory launchd guarda a meno che tu non voglia lanciare iCal ogni volta che accedi e respawn se dovessi mai scegliere di uscire da iCal.

<?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.dori.iCalForever</string>
    <key>OnDemand</key>
    <false/>
    <key>ProgramArguments</key>
    <array>
        <string>/Applications/iCal.app/Contents/MacOS/iCal</string>
    </array>
</dict>
</plist>

Ora hai bisogno di un singolo script di shell che chiami questi due comandi separati da un sleep abbastanza lungo da eseguire qualsiasi compito che iCal deve eseguire.

launchctl load ~/Library/DontLaunchAgents/com.dori.iCalForever.plist
sleep 600 #sleep time in seconds
launchctl unload ~/Library/DontLaunchAgents/com.dori.iCalForever.plist

.. e Bob è tuo zio.

    
risposta data 21.04.2011 - 01:02
fonte
0

Qualcosa che potresti provare se la configurazione di questo sta diventando un problema è Lingon , è un editor GUI facile da usare per launchd, proverei a configurare il tuo lavoro e vedere se ottieni gli stessi risultati.

    
risposta data 18.04.2011 - 18:55
fonte

Leggi altre domande sui tag