2013-05-23 23 views
15

Tôi đã định cấu hình launchd để bắt đầu lệnh lúc 18 giờ mỗi ngày trên mac pro của tôi, nhưng nó không hoạt động.Cách kiểm tra xem launchd có bắt đầu tập lệnh không?

Tôi muốn kiểm tra xem bản phát hành có chạy lệnh hay không. Tôi đã thử giao diện điều khiển hệ thống, không tìm thấy bất kỳ thứ gì có giá trị.

phiên bản mac os của tôi là mac os x 10.8.3

tập tin plist 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>mytask</string> 
    <key>Program</key> 
    <string>/opt/local/bin/node</string> 
    <key>ProgramArguments</key> 
    <array> 
     <string>/Users/xxx/My/task.js</string> 
    </array> 
    <key>StartCalendarInterval</key> 
    <dict> 
     <key>Hour</key> 
     <integer>18</integer> 
     <key>Minute</key> 
     <integer>0</integer> 
    </dict> 
    <key>StandardOutPath</key> 
    <string>/Users/xxx/launchd.stdout.log</string> 
    <key>StandardErrorPath</key> 
    <string>/Users/xxx/launchd.stderr.log</string> 
</dict> 
</plist> 
+0

Tôi sẽ chỉ ra cho những người (như tôi) mà không thông báo, nhưng thực thi là hoàn toàn đủ điều kiện '/ opt/local/bin/node'. Điều này có thể cần thiết vì launchd có [cấu hình môi trường khác] (https://discussions.apple.com/thread/3244126?tstart=0) so với người dùng, mặc dù tập lệnh được [chạy trong tài khoản của người dùng] (https: //developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html#pageTitle). – Jeff

Trả lời

18

Bạn định nghĩa StartCalendarInterval, vì vậy công việc đã được thực hiện khi nó đã được nạp nó sẽ được thực hiện mỗi ngày lúc 18:00.

Query launchd (8) để tìm hiểu trạng thái thoát của nó:

launchctl list | grep mytask 

này sẽ trả về một dòng dòng này:

<pid> <status> mytask 

Khi pid là một con số, công việc hiện đang chạy. Nếu không, hãy xem status, là mã thoát của chương trình, nút trong trường hợp của bạn. Mã thoát của 0 có nghĩa là chương trình đã được hoàn tất thành công hoặc chưa được bắt đầu. Số dương được trả về cho lỗi chương trình, trong khi số âm có nghĩa là công việc đã chấm dứt do tín hiệu.

Tôi cho rằng công việc không thành công. Bạn có thể muốn kiểm tra đầu ra/lỗi chuẩn của chương trình. Chỉ định StandardOutPathStandardErrorPath để thực hiện điều đó. Nội dung của các tệp này có thể sẽ cho bạn biết lý do chương trình không thành công.

+0

Tôi chạy danh sách launchctl và nhận trạng thái 0. Tôi thêm StandardOutPath và StandardErrorPath vào plist như trên, nhưng không tìm thấy tệp nào sau khi tôi chạy tác vụ với khởi chạy launchctl. Vì vậy, tôi cảm thấy có vẻ như nhiệm vụ vẫn chưa được bắt đầu. – hywl51

+2

Đảm bảo bạn tải lại định nghĩa công việc ('unload', rồi' load') sau khi thay đổi nó. Chỉ cần sửa đổi các tập tin và phát hành một lệnh bắt đầu sẽ không làm công việc. – LCC

+0

Thanks.Sau khi tôi tải lên và tải nhiệm vụ, StandardOutPath và StandardErrorPath hoạt động tốt. – hywl51

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