Mengapa pekerjaan launchd saya berjalan saat boot bahkan dengan kunci RunAtLoad disetel ke false?

10

Saya memiliki file launchd plist yang saya gunakan untuk menjalankan program pada waktu yang dipilih setiap hari. Berhasil, tetapi juga menjalankan program setiap kali saya mem-boot komputer atau membongkar dan memuat ulang pekerjaan menggunakan program GUI LaunchControl --- meskipun saya memiliki RunAtLoadkunci yang disetel ke false?

File lengkap plist ada di bawah ini; terletak di /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>

Pikiran?

pengguna76493
sumber
Tampaknya KeepAlivedefinisi saya menyiratkan RunAtLoad, dan bahkan mengesampingkan upaya saya untuk menjadikannya RunAtLoadsalah. Tidak yakin mengapa ini terjadi, tetapi mengeluarkan KeepAliveblok tampaknya telah memperbaiki masalahnya.
user76493

Jawaban:

10

Anda mungkin memiliki interaksi antara tombol SuccessfulExitdan RunAtLoad. The launchd plist pengguna halaman menyebutkan inversi terjadi jika RunAtLoadadalah set:

Exit Sukses

Jika benar, pekerjaan akan dimulai kembali selama program keluar dan dengan status keluar nol.

Jika salah, pekerjaan akan dimulai kembali dalam kondisi terbalik. Kunci ini menyiratkan bahwa "RunAtLoad" disetel ke true, karena pekerjaan harus dijalankan setidaknya sekali sebelum kita bisa mendapatkan status keluar.

Orang lain telah berjuang dengan perilaku ini, lihat launchd mengabaikan RunAtLoad = false .

Graham Miln
sumber