Làm cách nào để gỡ lỗi tập lệnh Upstart?


67

Vì một số lý do, tôi gặp lỗi trong quá trình nâng cấp apport , nguyên nhân của việc này là

% sudo service apport start
start: Job failed to start

Theo sysvinit, tôi có thể gỡ lỗi loại vấn đề này bằng cách chạy ví dụ

sudo sh -x /etc/init.d/whatever start

nhưng điều đó dường như không phù hợp với Upstart. Tôi nên thử gì tiếp theo?

Hóa ra có một cách giải quyết sẽ cho phép tiến hành cài đặt. Nhưng tôi vẫn quan tâm đến câu hỏi chung về cách người ta theo dõi kịch bản.


1
Tôi đang làm việc với một câu trả lời kỹ lưỡng hơn, nhưng nhờ liên kết đến cách giải quyết, điều tương tự đã xảy ra với tôi khi cập nhật ngày hôm nay!
Mark Russell

Haha, và họ đã phát hành bản sửa lỗi 12 phút trước. Không chạy Beta vui sao? (không thực sự!)
Mark Russell

+ Muhammad đăng câu trả lời đúng dưới đây.
Travis Reeder

Tôi tìm thấy thông tin gỡ lỗi hữu ích trong /var/log/syslog.
Matt

Câu trả lời:


29

Tất cả các thông tin sau (và khá nhiều trợ giúp Upstart hữu ích hơn) là từ The Upstart Cookbook . Phần 18 bao gồm gỡ lỗi. http://upstart.ubfox.com/cookbook/#debugging

Trong trường hợp cụ thể theo dõi một đoạn "kịch bản" của một công việc Upstart, bạn nên thêm các dòng sau ngay bên dưới từ "script":

exec 2>>/dev/.initramfs/myjob.log
set -x

Lý do cho vị trí kỳ lạ là /dev/.initramfs/ có sẵn trong khởi động rất sớm, trước khi hệ thống tệp gốc đã được tải và tiếp tục khả dụng sau khi khởi động. Tôi đoán với apport, tuy nhiên, có lẽ bạn không cần sử dụng đường dẫn đó. Tuy nhiên, thật tuyệt khi biết tùy chọn này.

Cũng cần lưu ý rằng tất cả các tập lệnh được chạy với set -ebất kỳ lệnh nào bị lỗi sẽ thoát hoàn toàn tập lệnh. Điều này có ý nghĩa, vì người ta phải rất cẩn thận khi chạy script như root.

Tôi đặc biệt khuyên bạn nên tham khảo Upstart Cookbook được liên kết ở trên nói chung cho bất kỳ ai làm việc với Upstart.


Cảm ơn vì điều đó, nếu tôi không thấy lỗi đã được khắc phục, có lẽ tôi đã sửa đổi tập lệnh để bật set -xnhư bạn đề xuất. Tôi đã chủ yếu tự hỏi nếu có cách nào sạch hơn để làm điều đó.
poolie

Vâng, không phải tôi biết (và nếu nó không có trong sách dạy nấu ăn, điều đó có nghĩa là có lẽ không có). Bên cạnh ý tưởng đó, hầu hết các kỹ thuật sửa lỗi được đề cập nhiều hơn về việc khắc phục sự cố Upstart và Upstart, đây là nơi tôi thường thấy. :)
Mark Russell

Tuy nhiên, phương pháp này sẽ thất bại nếu setuidsetgidđược sử dụng trong các công việc.
0xC0000022L

/dev/.initramfs không phải lúc nào cũng có mặt. Tôi vừa đi qua một cỗ máy không có con đường này.
Sange Borsch

110

Upstart ghi nhật ký thực thi dịch vụ của bạn trong một tệp nhật ký có cùng tên trong /var/log/upstart/your-service-name.log. Nó sẽ hữu ích.


2
Phải, có vẻ như điều này bao gồm các tiêu chuẩn của công việc, vì vậy nếu tôi bật set -xnó có thể sẽ hiển thị ở đó.
poolie

1
Tôi đặt một câu lệnh nhật ký dựa trên tiếng vang trong tập lệnh /etc/init.d/Xservice của tôi nhưng nó không hiển thị ở vị trí này! HĐH: Ubuntu 14.04 Trusty
Champ

Tại sao không để syslog? Tôi có thể đề xuất một tính năng chung, có thể là chính rsyslog, đó là sự khởi đầu và bất kỳ thành phần nào sẽ sử dụng để ghi vào syslog nếu nó không có sẵn hoặc đến một nơi tạm thời sẽ được chuyển sang syslog asap. Tôi phải mất nửa ngày để tìm thấy điều này. Xin vui lòng chuyển tiếp nhận xét này TIA.
Papou

4
Điều này dường như không còn đúng trong 16.04, ít nhất là từ 15.10: các tệp cuối cùng trong thư mục đó được ghi ngày từ ngay trước khi phát hành 15.10.
FGM

1
@FGM điều này là do 16.04 không còn sử dụng mới bắt đầu, nó sử dụng systemd. Nhật ký được truy cập vớijournalctl
Jeremy
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.