Tại sao công việc launchd của tôi chạy khi khởi động ngay cả với khóa RunAtLoad được đặt thành false?


10

Tôi có một tệp plist launchd mà tôi sử dụng để chạy một chương trình tại một thời điểm được chọn mỗi ngày. Nó hoạt động, nhưng nó cũng chạy chương trình bất cứ khi nào tôi khởi động máy tính hoặc giải nén và tải lại công việc bằng chương trình GUI LaunchControl --- ngay cả khi tôi có RunAtLoadkhóa được đặt thành false?

Các tập tin đầy đủ là dưới đây; nó nằm ở /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>

Suy nghĩ?


Có vẻ như KeepAliveđịnh nghĩa của tôi là ngụ ý RunAtLoad, và thậm chí ghi đè nỗ lực của tôi để đặt RunAtLoadthành sai. Không chắc chắn tại sao đây là trường hợp, nhưng việc đưa ra KeepAlivekhối dường như đã khắc phục vấn đề.
user76493

Câu trả lời:


10

Bạn có thể có một sự tương tác giữa các phím SuccessfulExitRunAtLoad. Các plist launchd thủ công trang đề cập đến một đảo ngược diễn ra nếu RunAtLoadlà thiết lập:

Thành công

Nếu đúng, công việc sẽ được khởi động lại miễn là chương trình thoát và với trạng thái thoát bằng không.

Nếu sai, công việc sẽ được khởi động lại trong điều kiện ngược lại. Khóa này ngụ ý rằng "RunAtLoad" được đặt thành true, vì công việc cần phải chạy ít nhất một lần trước khi chúng ta có thể có trạng thái thoát.

Những người khác đã đấu tranh với hành vi này, xem launchd bỏ qua RunAtLoad = false .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.