Tôi có một tập lệnh launchd trong đó lệnh tôi đang cố chạy bị lỗi (rõ ràng đó không phải là một từ, bây giờ), phàn nàn về việc sử dụng không đúng.
Lỗi cụ thể tôi nhận được là văn bản sử dụng của lệnh bị đổ vào nhật ký hệ thống. Từ đây, tôi suy ra thông tin khác (đường dẫn đến lệnh, thời gian, v.v.) trong phần chính đang được phân tích cú pháp chính xác, không phải là tùy chọn của lệnh.
Sau khi sử dụng lệnh, tôi có một dòng cuối cùng:
18/11/2013 09:30:00.101 com.apple.launchd.peruser.501: (fake.lable.seti[33833]) Exited with code: 1
Nhưng điều đó chỉ có nghĩa là "Tôi đã thoát với một lỗi".
Tôi biết launchd tách lệnh từ các tùy chọn của nó và trong trang man cho bạn biết về ProgramArgument: "... Xin lưu ý: nhiều người bị nhầm lẫn bởi khóa này. Vui lòng đọc execvp (3) rất cẩn thận! .."
Vâng, tôi đã đọc execvp (3) và tôi không phải là người khôn ngoan hơn, vì vậy tôi đang hỏi bạn rất nhiều điều đáng yêu.
Thông thường, chạy lệnh từ thiết bị đầu cuối, nó sẽ trông như thế này:
/Library/Application\ Support/BOINC\ Data/boinccmd --host localhost --passwd gobbledygook --project http://setiathome.berkeley.edu/ update
Điều này làm việc một điều trị.
Và đây là cách tôi chia nó trong phần Chương trình / Chương trình của chương trình LaunchAgent của tôi:
<key>Program</key>
<string>/Library/Application Support/BOINC Data/boinccmd</string>
<key>ProgramArguments</key>
<array>
<string>--host localhost</string>
<string>--passwd gobbledygook</string>
<string>--project http://setiathome.berkeley.edu/ update</string>
</array>
(đối với bản ghi, ban đầu tôi có đường dẫn đến boinccmd \ thoát ra ngoài, nhưng điều đó không hiệu quả, launchd thoát khỏi không gian trong đường dẫn cho bạn)
Tôi đã thử tách các đối số xuống hơn nữa:
<key>Program</key>
<string>/Library/Application Support/BOINC Data/boinccmd</string>
<key>ProgramArguments</key>
<array>
<string>--host</string>
<string>localhost</string>
<string>--passwd</string>
<string>gobbledygook</string>
<string>--project</string>
<string>http://setiathome.berkeley.edu/</string>
<string>update</string>
</array>
Nhưng điều đó dường như cũng không hoạt động.
Như mọi khi, tôi rất chắc chắn rằng tôi đang thiếu một cái gì đó quá đơn giản.
Cảm ơn.
CÂU TRẢ LỜI:
Dòng đầu tiên của ProgramArgument cần phải là đường dẫn đến chương trình. Đây là những gì đã làm tôi vấp ngã và thực sự những gì có lẽ có nghĩa là "... Xin hãy đọc thật kỹ! .." :) Tôi cũng thấy rằng tôi phải chia các đối số thành các phần thành phần của chúng. Khi tôi có tất cả những thứ đó, toàn bộ công việc trở nên quyến rũ. Cảm ơn rât nhiều.
<key>Program</key>
<string>/Library/Application Support/BOINC Data/boinccmd</string>
<key>ProgramArguments</key>
<array>
<string>/Library/Application Support/BOINC Data/boinccmd</string>
<string>--host</string>
<string>localhost</string>
<string>--passwd</string>
<string>gobbledygook</string>
<string>--project</string>
<string>http://setiathome.berkeley.edu/</string>
<string>update</string>
</array>
Một bản chỉnh sửa cuối cùng để nói về một lời giải thích dễ hiểu về lý do TẠI SAO nên xem, giải thích của SirPavlova.
~ W
<string>--host localhost</string>
chắc chắn sẽ không hoạt động. Hãy nhớ rằng, khi bạn viết một dòng lệnh vào shell, nó không biết phần nào của tùy chọn và đối số thông thường là gì - nó chỉ phân tách trên khoảng trắng trước khi truyền đối số cho chương trình đang chạy. Ngoài ra, nó có thể hữu ích nếu bạn hiển thị lỗi chính xác boinccmd
đang báo cáo.