Cách chạy AppleScript (.scpt) dưới dạng LaucnDaemon bằng root


2

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?


Vui lòng chia sẻ nội dung của bảng khởi chạy LaunchDaemon của bạn.
SillyWilly

hãy thử và thiết lập nó với lingon peterborgapps.com/lingon Có tùy chọn nào cho việc này nếu tôi nhớ đúng
markhunte

Câu trả lời:


0

Giả sử công việc launchd của bạn được thiết lập chính xác, bạn có thể đạt đến giới hạn của AppleScript.

AppleScript Yêu cầu GUI (Phiên Aqua)

Nếu AppleScript của bạn được khởi chạy bằng launchd như một rootquy trình người dùng , nó sẽ không có giao diện người dùng đồ họa được liên kết . Phần lớn AppleScript yêu cầu giao diện người dùng đồ họa để hoạt động ổn định. Tùy thuộc vào phiên bản OS X, nó có thể hoạt động, nhưng nó không được thiết kế.

Các quy trình trên OS X không thể giao thoa giữa các phiên của người dùng .

Tập lệnh Shell

Một cách tiếp cận mạnh mẽ hơn là tách biệt chức năng cần các đặc quyền cao hơn thành tập lệnh shell như bash, perl, ruby ​​hoặc python.

AppleScript của bạn sau đó có thể gọi tập lệnh đó bằng cách sử dụng tập lệnh shell của AppleScript :

do shell script "command" user name "me" password "mypassword" with administrator privileges

Nếu bạn cần tránh nhúng tên người dùng và mật khẩu, điều này là có thể nhưng vượt quá phạm vi của câu hỏi này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.