launchdchạy Daemons ( /Library/LaunchDaemonshoặ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 launchdvào /Libraryhoặc ~/Librarythư 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 .plisttậ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ờ ( StartIntervalhoặc StartIntervalCalendarlà các khóa chúng tôi muốn - StartIntervalcho một mục xảy ra mỗi xgiây, StartIntervalCalendartrong 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 .plistcầ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.flickrstatssẽ được lưu dưới dạng local.my-mac.flickrstats.plist). Nếu bạn chưa có, hãy di chuyển .plisttệp đó sang /Library/LaunchDaemonskhi 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 launchctlkhi 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