Làm cách nào để liên kết một chuỗi 2 launchd với các mục tiêu tên miền và dịch vụ của nó?


7

Chính xác thì "miền" và "mục tiêu dịch vụ" này là gì và làm cách nào để liên kết chúng với các mục để sử dụng bởi launchd?

OS X 10.10 giới thiệu một launchctlAPI mới để quản lý LaunchDaemons và khởi chạy các chuỗi. Nhật ký thông điệp và trang man gợi ý rằng các khóa thích KeepAliveRunAtLoadkhông nên được sử dụng nữa và các tiểu ban đó enable; bootstrap; và kickstartnên được sử dụng theo sở thích load -wunload -w

Tuy nhiên, không rõ các trang hướng dẫn làm thế nào để liên kết một số nguyên với "miền" và "mục tiêu dịch vụ" mà nó nói về và không có các lệnh này không thể được sử dụng với các bảng hiện có dường như khá đủ cho OS X 10.9

Ví dụ [đã cập nhật]: Một nguyên tắc cơ bản mà chúng tôi đang cố gắng "khởi chạy"; dường như bootstrapping vào miền "system" nhưng sau đó không được nhận dạng trong "system"

# pwd
/Library/LaunchDaemons
# cat com.iainhouston.django.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.iainhouston.django</string>
     <key>ProgramArguments</key>
     <array>
          <string>/usr/local/virtualenvs/django.iainhouston.com/bin/gunicorn</string>
          <string>--bind=127.0.0.1:49202</string>
          <string>--workers=2</string>
          <string>superlists.wsgi:application</string>
     </array>
     <key>Disabled</key><false/>
</dict>
</plist> 
# launchctl bootstrap system com.iainhouston.django.plist
/Library/LaunchDaemons/com.iainhouston.django.plist: Service is disabled 
# launchctl enable system/com.iainhouston.django.plist 
# launchctl kickstart system/com.iainhouston.django.plist
Could not find service "com.iainhouston.django.plist" in domain for system  

Động lực

Các hồ sơ đăng nhập hệ thống mà launchctl -w load ...phàn nàn khi chúng tôi sử dụng KeepAlivevới RunAtLoadrằng dịch vụ này được định nghĩa để được liên tục chạy và vốn không hiệu quả. vì vậy chúng tôi có động lực để sử dụng giao diện mới.
Không chỉ vậy, chúng tôi gặp vấn đề đáng kể với việc sử dụng bộ xử lý quá mức mà chúng tôi muốn kiểm soát bằng cách cung cấp các từ khóa theo yêu cầu phù hợp, vì vậy, một lần nữa, chúng tôi có động lực để hiểu cách tương tác với launchd mới .... không dễ dàng với các tài liệu khi họ đứng!

Câu trả lời:


3

Nếu bạn có thể, hãy gửi một lỗi với Apple liên quan đến tài liệu không đầy đủ hoặc không rõ ràng.

launchddường như đã được viết lại cho OS X 10.10 và có khả năng vẫn còn thay đổi cho một vài phiên bản nhỏ.

Tên miền và mục tiêu dịch vụ dường như là một sự trừu tượng của các thư mục khác nhau có sẵn cho vé công việc ra mắt. Chúng cũng cho phép một phương tiện cho các lệnh launchctl nhắm mục tiêu các phiên cụ thể; một tính năng sẽ cho phép lệnh launchctl ảnh hưởng đến các phiên người dùng khác.

Tuy nhiên, kể từ OS X 10.10.1, launchd.plisttrang man không đề cập đến việc không dùng nữa KeepAlivehoặc RunAtLoadkhóa.

Apple đề nghị tránh KeepAliveRunAtLoadvì ý định là tránh bao giờ khởi chạy một quy trình mà không đảm bảo công việc sẽ được thực hiện. Cả hai khóa vẫn còn và được yêu cầu cho nhiều nhiệm vụ.

Tài liệu tham khảo tốt nhất vẫn là Ghi chú kỹ thuật TN2083, Daemon và Đại lý . Tài liệu này cung cấp một cái nhìn sâu sắc tuyệt vời về launchd và ý định của Apple đối với cách thực hiện các quy trình nền.


Có, tôi sẽ nộp báo cáo lỗi. Tất nhiên tôi đã chuyển sang TN2083 trước khi tôi đăng câu hỏi này nhưng nó đã lỗi thời: nó được cập nhật lần cuối vào tháng 11 năm 2007! Các trang web dành cho nhà phát triển ở mức 10,9 và hướng bạn đến các trang man trên hệ thống Yosemite của bạn. Ở đó bạn sẽ thấy các cuộc thảo luận về các phím KeepAlive và RunAtLoad. Không phải là chúng không được dùng nữa, nhưng trong trường hợp RunAtLoad: "Cần tránh khóa này, vì các công việc đầu cơ khởi động có ảnh hưởng xấu đến các kịch bản khởi động hệ thống và đăng nhập người dùng." Tuy nhiên, không có loại công việc ví dụ hoặc đề xuất để sử dụng. Rất không đạt yêu cầu.
iainH

Lỗi 1915644 được tạo.
iainH

Rất may RunAtLoadKeepAlivevẫn còn nhưng chỉ đơn giản là khuyên chống lại. Một vài nhiệm vụ yêu cầu những hành vi này nhưng bất cứ nơi nào có thể Apple rõ ràng muốn các kỹ sư xem xét lại cách tiếp cận mặc định. Một chút nũng nịu hơn là tuyệt đối. Cảm ơn bạn đã nộp và lưu ý các lỗi.
Graham Miln

Tôi không cảm thấy mình chỉ đang tập OCD! OK, trang man nũng nịu nhưng nhật ký bây giờ phàn nàn nếu chúng ta sử dụng KeepAlivevới RunAtLoadđiều đó "Dịch vụ này được xác định là liên tục chạy và vốn không hiệu quả." vì vậy chúng tôi có động lực để sử dụng giao diện mới. Không chỉ vậy, chúng tôi gặp vấn đề với việc sử dụng bộ xử lý quá mức mà chúng tôi muốn kiểm soát bằng cách cung cấp các từ khóa theo yêu cầu phù hợp, vì vậy, một lần nữa, chúng tôi có động lực để hiểu cách tương tác với launchd mới .... không dễ dàng với các tài liệu như họ đứng.
iainH

3

Bạn đang ở gần, nhưng bạn không nên có phần .plist trong các lệnh enable và kickstart. Dưới đây là một số mã chúng tôi sử dụng để liên kết nó với một mục tiêu tên miền và dịch vụ cho người dùng. $ UID về cơ bản là userid của bạn.

launchctl bootstrap gui/$UID /Library/LaunchAgents/com.yourcompany.yourapp.plist
launchctl enable gui/$UID/com.yourcompany.yourapp
launchctl kickstart -k gui/$UID/com.yourcompany.yourapp

Một bước nữa nhưng .. bạn sẽ làm gì để "dỡ" daemon khởi động? unbootstrapchưa được thực hiện; stopdisabledường như không có hiệu lực và killcông nhận không phải SIGTERMvà cũng không SIGKILL....
iainH

Bạn sẽ chỉ dừng lại (sẽ kết thúc quá trình) và xóa tệp plist, phải không?
Ken Aspeslagh

Nên - nhưng không (Xem bình luận trước của tôi). Kiểm tra nó và xem những gì bạn nhận được. Rõ ràng API mới chưa được triển khai hoàn toàn và cần tránh.
iainH
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.