2013-06-12 60 views
9

Câu hỏi của tôi là làm thế nào để thực hiện quy trình daemon MacOSX bằng cách sử dụng launchd bắt đầu với quyền root sau khi khởi động lại?Khởi động Mac OSX launchctl khởi chạy tiến trình root khi khởi động

Tôi đang viết đơn đăng ký sử dụng tại nhà chặn quyền truy cập vào các trang web. Nó được viết bằng python và sửa đổi tập tin/ect/hosts để vô hiệu hóa hoặc kích hoạt các url được liệt kê. Các ứng dụng chính là trong django và tôi tạo ra một daemon xoắn python mà thực sự sửa đổi thực tế của tập tin/etc/hosts là đặc quyền truy cập root được yêu cầu.

Tôi đã tạo tệp plist hoạt động với một vấn đề nhỏ. Sau khi khởi động lại quá trình daemon có đặc quyền đăng nhập bình thường của tôi thay vì đặc quyền root.

Cách khắc phục là ngừng quá trình với các đặc quyền thông thường của tôi, sau đó khởi động quy trình bằng sudo.

launchctl unload /Library/LaunchAgents/com.balanceinfosystems.socialshields.twisted.plist 
sudo launchctl load /Library/LaunchAgents/com.balanceinfosystems.socialshields.twisted.plist 

Các tập tin plist

<?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.balanceinfosystems.socialshields.twisted</string> 
    <key>Program</key> 
    <string>/source/social_shields/social_shields_twisted.py</string> 
    <key>KeepAlive</key> 
    <true/> 
    </dict> 
</plist> 

Trả lời

19

Bạn đã đặt điều này trong thư mục sai. LaunchAgents là các quy trình chạy trên mỗi người dùng. Quy trình hệ thống đi theo số /Library/LaunchDaemons. Chúng được chạy dưới dạng root. Nếu bạn muốn điều này chạy lúc khởi động, tôi khuyên bạn nên làm rõ điều đó với:

<key>RunAtLoad</key> 
<true/> 
+0

Cảm ơn Rob. Chúc mừng Keith. –

Các vấn đề liên quan