Tôi có một AppleScript hoặc bộ Applescripts mà tôi đang cố chạy dưới dạng LaunchDaemon. Tôi không gặp vấn đề gì khi chạy LaunchDaemon với người dùng của mình. Vấn đề xảy ra ở chỗ tôi có nhu cầu đọc một tệp chỉ có thể đọc được bằng root, đây là do thiết kế vì lý do bảo mật vì tệp chứa thông tin nhạy cảm.
Tôi đã cài đặt các tệp AppleScript được biên dịch sẵn cần thiết, các tệp .scpt, trong:
/Library/Scripts/myApplication/
Tôi đã đặt các ý kiến của mình dưới:
/Library/LaunchDaemons
Chỉnh sửa: Đây là nguyên tắc cho Daemon của tôi:
<?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>Label</key>
<string>com.mycompany.myapp.service</string>
<key>KeepAlive</key>
<true/>
<key>RunAtLoad</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/osascript</string>
<string>/Library/Scripts/myApp/myApp.scpt</string>
</array>
</dict>
Bây giờ, khi tôi cố tải các plists bằng launchctl và sudo
sudo launchctl load -w /Library/LaunchDaemons/com.mycompany.myapp.service.plist
Tôi gặp lỗi trong systemlog.log:
Aug 26 17:54:13 computername com.apple.xpc.launchd[1] (com.mycompany.myapp.service[74757]): Service exited with abnormal code: 1
Aug 26 17:54:13 computername com.apple.xpc.launchd[1] (com.mycompany.myapp.service): Service only ran for 0 seconds. Pushing respawn out by 10 seconds.
Tuy nhiên nếu tôi thả "sudo" từ lệnh launchctl thì nó hoạt động hoàn hảo. Tôi thậm chí đã thử chạy các kịch bản từ thiết bị đầu cuối với tư cách là người dùng root, nó cũng hoạt động tốt. Tuy nhiên, ngay khi tôi cố tải chúng bằng launchctl và sudo thì mọi thứ đều chết.
Để có được tập lệnh này chạy trước đó, tôi phải cung cấp cho ứng dụng chạy các đặc quyền truy cập tập lệnh trên máy, vì vậy Sublime Text 2, Terminal và Script Editor trước đây. Tôi đoán rằng đây là nguyên nhân khiến tập lệnh không chạy nhưng tôi không biết nên bật chương trình nào dưới khả năng truy cập, vì tôi không được nhắc. Vậy làm thế nào để tôi có được kịch bản này để chạy theo cách tôi cần?