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

4

Como se indica en el título, "No se puede salir de la aplicación iniciada a través de launchd", o más precisamente, puedo dejar , pero luego se reinicia automáticamente.

Antecedentes : prefiero usar BusyCal, no iCal, pero hay algunas cosas que debe hacer en iCal antes de que BusyCal pueda obtener los resultados. Pensé que crearía dos scripts launchd: uno para lanzar iCal todos los días a las 5 am, y otro para salir unos minutos después.

Esta es la lista de inicio (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>

Entendí que no necesitaba las teclas KeepAlive y OnDemand , pero las puse de todos modos para intentar detener el relanzamiento.

Aquí está la lista 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 bien, pero después de que Quit se ejecute, iCal se reinicia.

¿Alguna idea sobre qué cosas probar o qué podría estar causando esto?

    
pregunta Dori 17.03.2011 - 23:43

3 respuestas

2

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

    
respondido por el geekosaur 17.03.2011 - 23:57
1

Una respuesta a este problema es ligeramente contraintuitiva.

Simplifique su archivo iCal plist y haga que iCal se ejecute para siempre estableciendo OnDemand en false . Aquí hay un archivo que probé almacenándolo como ~/Library/DontLaunchAgents/com.dori.iCalForever.plist . No deje este archivo en ningún directorio en el que Launchd busque, a menos que quiera iniciar iCal cada vez que inicie sesión y vuelva a aparecer si alguna vez decide 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 necesita un solo script de shell que llame a estos dos comandos separados por un tiempo de espera el tiempo suficiente para realizar cualquier tarea que deba realizar iCal.

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.

    
respondido por el bmike 21.04.2011 - 01:02
0

Algo que podría querer probar si configurar esto se está convirtiendo en un problema es Lingon , es un editor de GUI fácil de usar para launchd, intentaría configurar su trabajo en él y ver si obtiene los mismos resultados.

    
respondido por el ConstantineK 18.04.2011 - 18:55

Lea otras preguntas en las etiquetas