4 votos

No se puede salir de la aplicación lanzada a través de launchd

Como dice el título, "No se puede salir de la aplicación lanzada a través de launchd" -o más precisamente, yo puede salir de él, pero luego se reinicia automáticamente de nuevo.


Antecedentes : Prefiero usar BusyCal, no iCal, pero hay algunas cosas de calendario que tienen que ser hechas por iCal antes de que BusyCal pueda obtener los resultados. Se me ocurrió crear dos launchd scripts: uno para lanzar iCal cada día a las 5 de la mañana, y otro para salir de él unos minutos después.


Aquí está el plist para lanzar (en ~/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>

Tenía entendido que no necesitaba el KeepAlive y OnDemand llaves, pero las puse de todos modos para tratar de detener el relanzamiento.

Aquí está el plist para salir (en ~/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>

Según mis archivos de registro, ambos se ejecutan sin problemas, pero después de la ejecución de Quit, iCal se reinicia.

¿Alguna idea de cosas para probar, o cosas que podrían estar causando esto?

2voto

Xavier Nodet Puntos 2498

Si no se especifica <Minute> en el <StartCalendarInterval> , entonces (al igual que cron 's * ) ejecutará el trabajo cada minuto.

1voto

Oskar Puntos 1242

Una respuesta a este problema es ligeramente contraintuitiva.

Simplifique su archivo plist de iCal y haga que iCal funcione para siempre configurando OnDemand a false . Aquí hay un archivo que probé almacenándolo como ~/Library/DontLaunchAgents/com.dori.iCalForever.plist - no dejes este archivo en cualquier directorio que launchd mire, a menos que quieras lanzar iCal cada vez que te conectes y respawnearlo si alguna vez decides salir de 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>

Ahora necesitas un único shell script que llame a estos dos comandos separados por un sleep lo suficientemente largo como para realizar cualquier tarea que iCal necesite realizar.

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

.. y Bob es tu tío.

0voto

Zac Puntos 89

Algo que podría probar si la configuración de esto se está convirtiendo en un dolor es Lingon Es un editor de GUI fácil de usar para launchd, yo trataría de configurar tu trabajo en él y ver si obtienes los mismos resultados.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X