¿Por qué mi trabajo de launchd se ejecuta en el arranque incluso con la clave RunAtLoad establecida en false?

10

Tengo un archivo launchd plist que uso para ejecutar un programa a una hora seleccionada todos los días. Funciona, pero también ejecuta el programa cada vez que inicio la computadora o descargo y vuelvo a cargar el trabajo usando el programa GUI LaunchControl --- ¿ aunque tengo la RunAtLoadclave establecida en falso?

El archivo plist completo está debajo; se encuentra en /Library/LaunchAgents/:

<?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>RunAtLoad</key>
    <false/>
    <key>KeepAlive</key>
    <dict>
        <key>SuccessfulExit</key>
        <false/>
    </dict>
    <key>Label</key>
    <string>com.adbot.plist</string>
    <key>LowPriorityIO</key>
    <true/>
    <key>Program</key>
    <string>/Users/wcm1/programming/ricedh/adbot/adbot.py</string>
    <key>StandardErrorPath</key>
    <string>/tmp/com.adbot.plist.err</string>
    <key>StandardOutPath</key>
    <string>/tmp/com.adbot.plist.out</string>
    <key>StartCalendarInterval</key>
    <array>
        <dict>
            <key>Hour</key>
            <integer>10</integer>
            <key>Minute</key>
            <integer>30</integer>
        </dict>
    </array>
</dict>
</plist>

Pensamientos?

usuario76493
fuente
Parece que mi KeepAlivedefinición implicaba RunAtLoad, e incluso anulaba mi intento de establecerlo RunAtLoaden falso. No estoy seguro de por qué este es el caso, pero eliminar el KeepAlivebloqueo parece haber solucionado el problema.
user76493

Respuestas:

10

Es probable que tenga una interacción entre las teclas SuccessfulExity RunAtLoad. La página de manual de launchd plist menciona que se produce una inversión si RunAtLoadse establece:

Salida exitosa

Si es verdadero, el trabajo se reiniciará siempre que el programa salga y con un estado de salida de cero.

Si es falso, el trabajo se reiniciará en la condición inversa. Esta clave implica que "RunAtLoad" está establecido en verdadero, ya que el trabajo debe ejecutarse al menos una vez antes de que podamos obtener un estado de salida.

Otros han luchado con este comportamiento, vea launchd ignora RunAtLoad = false .

Graham Miln
fuente