launchd
chạy Daemons ( /Library/LaunchDaemons
hoặc /System/Library/LaunchDaemons
) với quyền root và sẽ chạy chúng bất kể người dùng có đăng nhập hay không. Đại lý khởi chạy ( /Library/LaunchAgents/
hoặc ~/Library/LaunchAgents/
) được chạy khi người dùng đăng nhập với tư cách người dùng đó. Bạn không thể sử dụng setuid để thay đổi người dùng đang chạy tập lệnh trên trình nền. Thư mục /System
được dành riêng cho các tác vụ Mac OS X, vì vậy tôi khuyên bạn nên đặt các mục của bạn launchd
vào /Library
hoặc ~/Library
thư mục vì nó có ý nghĩa.
Vì vậy, bước đầu tiên là xác định xem bạn đang làm đại lý hay daemon.
Bước thứ hai là tạo .plist
tập tin của bạn . Bạn có thể sử dụng các chương trình dựa trên GUI như Lingon để trợ giúp việc này hoặc chỉ sử dụng trình soạn thảo văn bản yêu thích của bạn:
Một mẫu .plist
để chạy tập lệnh mỗi giờ ( StartInterval
hoặc StartIntervalCalendar
là các khóa chúng tôi muốn - StartInterval
cho một mục xảy ra mỗi x
giây, StartIntervalCalendar
trong một thời gian và / hoặc ngày cụ thể. Xem 126907 trên SuperUser để biết ví dụ tôi đã tạo với StartCalWikiInterval):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>local.IDENTIFIER_HERE.SOMETHING</string>
<key>OnDemand</key>
<true/>
<key>RunAtLoad</key>
<false/>
<key>UserName</key>
<string>USERNAME HERE</string>
<key>Program</key>
<string>/PATH/TO/SCRIPT</string>
<key>ProgramArguments</key>
<array>
<string>Argument_1</string>
<string>Argument_2</string>
</array>
<key>StartInterval</key>
<integer>3600</integer>
</dict>
</plist>
Sửa đổi mức .plist
cần thiết để trỏ đến tập lệnh của bạn và mọi đối số nếu cần (đối số nằm trên các dòng riêng biệt) và lưu tệp có cùng tên với giá trị Nhãn nhưng .plist
ở cuối. (ví dụ, local.my-mac.flickrstats
sẽ được lưu dưới dạng local.my-mac.flickrstats.plist
). Nếu bạn chưa có, hãy di chuyển .plist
tệp đó sang /Library/LaunchDaemons
khi tạo Daemon (chạy mọi lúc) hoặc đến ~/Library/LaunchAgents
(chỉ bạn đã đăng nhập) hoặc /Library/LaunchAgents
(bất kỳ người dùng nào đã đăng nhập).
Để bắt đầu công việc bạn muốn chạy launchctl
khi cần thiết để tải tệp. Đối với các mục trong /Library
, bạn nên sử dụng sudo: ví dụ:sudo launchctl load -w /PATH/TO/PLIST
Để tham khảo, hãy xem các câu hỏi sau về Siêu người dùng: Lệnh Launchd với quyền root , Tải một trình nền toàn hệ thống và Làm cách nào tôi có thể có được một tập lệnh để chạy mỗi ngày