tl; dr: sử dụng trình quản lý và trình khởi chạy quy trình riêng của OSX , launchd
.
Để làm như vậy, làm một launchctl
daemon. Bạn sẽ có toàn quyền kiểm soát tất cả các khía cạnh của kịch bản. Bạn có thể chạy một lần hoặc giữ sống như một daemon. Trong hầu hết các trường hợp, đây là cách để đi.
- Tạo một
.plist
tệp theo hướng dẫn trong tài liệu Apple Dev tại đây hoặc chi tiết hơn bên dưới.
- Đặt trong
~/Library/LaunchAgents
- Đăng nhập (hoặc chạy thủ công qua
launchctl load [filename.plist]
)
Để biết thêm launchd
, bài viết trên wikipedia khá hay và mô tả hệ thống cũng như các ưu điểm của nó so với các hệ thống cũ khác.
Đây là tệp plist cụ thể để chạy tập lệnh khi đăng nhập .
Đã cập nhật 2017/09/25 cho OSX El Capitan và mới hơn (tín dụng cho Jose Messias Jr ):
<?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.user.loginscript</string>
<key>ProgramArguments</key>
<array><string>/path/to/executable/script.sh</string></array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Thay thế khóa <string>
sau của Chương trình bằng lệnh mong muốn của bạn (lưu ý rằng bất kỳ tập lệnh nào được tham chiếu bởi lệnh đó phải được thực thi: chmod a+x /path/to/executable/script.sh
để đảm bảo nó dành cho tất cả người dùng).
Lưu thành ~/Library/LaunchAgents/com.user.loginscript.plist
Chạy launchctl load ~/Library/LaunchAgents/com.user.loginscript.plist
và đăng xuất / đăng nhập để kiểm tra (hoặc để kiểm tra trực tiếp, chạy launchctl start com.user.loginscript
)
Đuôi /var/log/system.log
cho thông báo lỗi.
Điều quan trọng là đây là mục launchd dành riêng cho người dùng, vì vậy nó sẽ được chạy khi đăng nhập cho người dùng cụ thể. Trình nền khởi chạy dành riêng cho hệ thống (được đặt trong /Library/LaunchDaemons
) được chạy khi khởi động.
Nếu bạn muốn một tập lệnh chạy khi đăng nhập cho tất cả người dùng, tôi tin rằng LoginHook là lựa chọn duy nhất của bạn và đó có lẽ là lý do nó tồn tại.