Cấu hình launchd


3

Tôi có một bệ phóng ~/Library/LaunchAgents được thiết kế để chạy một tập lệnh nằm ở ~/writout.sh mỗi ngày vào lúc 10:30 sáng:

<?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>local.jackson.testwrite.plist</string>
    <key>Program</key>
    <string>/Users/jacksonkearl/writeout.sh</string>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>10</integer>
        <key>Minute</key>
        <integer>30</integer>
    </dict>
</dict>
</plist>

Kịch bản là:

#!/bin/bash
echo "it works" >> log.txt

Tuy nhiên, không có gì được viết vào thời điểm mong muốn.

Có những bước tôi phải thực hiện để cảnh báo launchd cho đại lý mới? Hoặc làm thế nào khác để tôi làm cho quá trình bắt đầu?

Câu trả lời:


3

Bạn cần tải tác nhân khởi chạy vào launchd.

  1. Thiết bị đầu cuối mở
  2. Kiểu cd ~/Library/LaunchAgents
  3. Kiểu launchctl load -w local.jackson.testwrite.plist (giả sử đó là tên của tệp plist của bạn)

Điều này sẽ tải và liên tục kích hoạt plist của bạn. Bạn có thể kiểm tra nếu nó được tải với launchctl list


3

Để gỡ lỗi này, bạn sẽ muốn bật chuyển hướng.

<key>StandardErrorPath</key>
<string>/tmp/local.job.err</string>
<key>StandardOutPath</key>
<string>/tmp/local.job.out</string>

Tôi cũng đã đặt phiên bản kịch bản của bạn vào /usr/local/bin và chắc chắn rằng nó đã được thực thi với chmod a+x

Lỗi tôi nhận được là:

/usr/local/bin/writeout.sh: line 3: log.txt: Permission denied

Vì vậy, bạn có thể muốn gửi echo lệnh để $TMPDIR hoặc một nơi khác có thể viết được. Dường như đường dẫn mặc định cho launchd không phải là một người dùng có thể viết thư cho (và có lẽ vì lý do chính đáng).

Nhưng, thực hiện launchd / launchctl bằng tay là thô. Tôi rất, rất khuyên bạn nên sử dụng một công cụ như LaunchControl hoặc là Ngôn ngữ . Họ cung cấp sự giúp đỡ và tự động hóa giúp tôi trở nên tốt hơn rất nhiều ở các kịch bản này.

Sử dụng Launch Control - nó nhanh chóng cho phép tôi tạo lại công việc của bạn, có tất cả các gợi ý hữu ích và quan trọng nhất là đề xuất chuyển hướng để gỡ lỗi tình trạng thoát / lỗi tập lệnh.

enter image description here

Với một cú nhấp chuột, nó đã thêm các dòng trên vào tệp plist của tôi và đề nghị lưu nó và tải lại công việc cho tôi.


2

Bạn có một số lỗi trong tập tin plist của bạn:

<key>Label</key>
<string>local.jackson.testwrite.plist</string>

trở thành

<key>Label</key>
<string>local.jackson.testwrite</string>

và số nhiều bị thiếu

</plist>

cuối cùng. Plist cuối cùng sẽ trông như thế này:

<?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>local.jackson.testwrite</string>
    <key>Program</key>
    <string>/Users/jacksonkearl/writeout.sh</string>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>10</integer>
        <key>Minute</key>
        <integer>30</integer>
    </dict>
</dict>
</plist>

Để tải LaunchAgent, nhập:

launchctl load /Users/jacksonkearl/Library/LaunchAgents/local.jackson.testwrite.plist

Để tải LaunchAgent vĩnh viễn, nhập

launchctl load -w /Users/jacksonkearl/Library/LaunchAgents/local.jackson.testwrite.plist
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.