Perché il mio lavoro launchd è in esecuzione all'avvio anche con la chiave RunAtLoad impostata su false?


10

Ho un file plist di avvio che utilizzo ogni giorno per eseguire un programma all'ora selezionata. Funziona, ma esegue anche il programma ogni volta che avvio il computer o scarico e ricarico il lavoro usando il programma GUI LaunchControl --- anche se ho la RunAtLoadchiave impostata su false?

Il file di plist completo è di seguito; si trova in /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>

Pensieri?


Sembra che la mia KeepAlivedefinizione fosse implicita RunAtLoade persino prevalente sul mio tentativo di impostare RunAtLoadsu falso. Non sono sicuro del perché, ma eliminare il KeepAliveblocco sembra aver risolto il problema.
user76493,

Risposte:


10

Probabilmente hai un'interazione tra i tasti SuccessfulExite RunAtLoad. La pagina del manuale del plist di avvio menziona un'inversione se RunAtLoadè impostata:

SuccessfulExit

Se vero, il lavoro verrà riavviato finché il programma esce e con uno stato di uscita pari a zero.

Se falso, il lavoro verrà riavviato nella condizione inversa. Questa chiave implica che "RunAtLoad" è impostato su true, poiché il lavoro deve essere eseguito almeno una volta prima di poter ottenere uno stato di uscita.

Altri hanno lottato con questo comportamento, vedi launchd ignora RunAtLoad = false .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.