Tôi muốn một tập lệnh (bash / zsh / ruby / ...) chạy vào lúc khởi động trong OS X. Cách đơn giản nhất để làm điều này là gì, mà không làm rối các tệp xml / plist và tốt nhất là không cần tạo meta AppleScript .
Tôi muốn một tập lệnh (bash / zsh / ruby / ...) chạy vào lúc khởi động trong OS X. Cách đơn giản nhất để làm điều này là gì, mà không làm rối các tệp xml / plist và tốt nhất là không cần tạo meta AppleScript .
Câu trả lời:
MacOS X sử dụng Vixie cron, có thẻ meta đặc biệt để khởi chạy khi khởi động lại. Xem trang người đàn ông cho định dạng tập tin.
cái gì đó như:
@reboot /path/to/script.sh
trong crontab của bạn sẽ làm việc. Tôi không chắc chắn rằng đây là một giải pháp tốt hơn launchd, có lẽ bạn có nhiều công cụ meta nhìn vào launchd hơn cron.
Trong trường hợp bạn thay đổi ý kiến của mình:
<?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>com.superuser.245713</string>
<key>ProgramArguments</key>
<array>
<string>/path/to/script.sh</string>
</array>
<key>UserName</key>
<string>someuser</string>
</dict>
</plist>
Lưu trữ như com.superuser.245713.plist
trong /Library/LaunchAgents/
và làm cho root:wheel
chủ sở hữu / nhóm.
/Library/LaunchAgents
chứ không phải là /System/Library/LaunchDaemons
kể từ khi /System
là thứ OS cụ thể và một trong những thuộc /Library
được sử dụng nhiều cho các công cụ của bên thứ ba. Ngoài ra, LaunchDaemons
"nên chứa các mục sẽ chạy dưới quyền root, thường là các quá trình nền" trong đó LaunchAgents
"chạy như một người dùng hoặc trong bối cảnh của vùng người dùng". Nguồn cho những trích dẫn đó là một bài viết tuyệt vời về launchd mà tôi tham khảo cho các câu hỏi launchd.
Ngoài ra còn có Móc đăng nhập nếu bạn muốn tập lệnh chạy (với quyền root) khi người dùng đăng nhập thay vì khi máy khởi động.
cron
trên OS X không tuyệt vời bằng việc đăng nhập theo mặc định (có một chủ đề trên đó chỉ vài ngày trước).