Câu trả lời:
Tạo hàm Bash của riêng bạn và đặt hàm này vào ~/.bashrc
:
check_upstart_service(){
status $1 | grep -q "^$1 start" > /dev/null
return $?
}
Tôi thực sự không thích cách phân tích cú pháp đầu ra, nhưng tôi không thấy một cách rõ ràng khác. Và trong trường hợp này, đầu ra của <service name> start
rất đáng tin cậy như được chỉ định trong tài liệu Upstart .
Bây giờ bạn có thể sử dụng nó như thế này:
if check_upstart_service ssh; then echo "running"; else echo "stopped"; fi
Dựa trên Chuỗi chứa trong bash :
job='your_job_name'
job_status=$(status ${job})
if [[ ${job_status} == *running* ]]
then
# do whatever you need
else
# do whatever you need
fi
Sự thúc đẩy đầu tiên của tôi là sử dụng biến thể của mã ImaginaryRobots được cung cấp
job='your_job_name'
dbus-send --system --print-reply --dest=com.ubuntu.Upstart \
/com/ubuntu/Upstart/jobs/${job}/_ \
org.freedesktop.DBus.Properties.Get string:'' string:state
mà sẽ trả lại một cái gì đó như
phương thức return sender =: 1.0 -> Dest =: 1.94 reply_serial = 2 chuỗi biến thể "đang chạy"
và sử dụng giải pháp trên để kiểm tra xem chuỗi trả về có chứa "đang chạy" hay không. Tuy nhiên, trong trường hợp công việc đó không chạy cuộc gọi dbus sẽ thoát với trạng thái 1 thay vì trả về "chờ" như tôi mong đợi.
status ${job}
sẽ không bao giờ thoát với trạng thái 1 trừ trường hợp khi không có công việc đó.
Bạn sẽ sử dụng DBUS để truy vấn trạng thái của dịch vụ cụ thể đó.
$ job=myjob
$ dbus-send --system --print-reply --dest=com.ubuntu.Upstart /com/ubuntu/Upstart/jobs/${job}/_ org.freedesktop.DBus.Properties.GetAll string:''
http://upstart.ubfox.com/cookbook/#get-status-of-job-via-d-bus
Lưu ý rằng nếu bạn đang viết công việc mới bắt đầu của riêng mình, bạn nên sử dụng các sự kiện mới bắt đầu hoặc phụ thuộc gói thay thế.
Có vẻ như lệnh trạng thái khởi động phù hợp với đặc tả tập lệnh init từ dự án Linux Standard Base, có nghĩa là bạn có thể giả sử mã thoát là 0 có nghĩa là chương trình đang chạy, mã thoát 1-3 có nghĩa là nó đang chạy và bất kỳ mã thoát khác có nghĩa là một trạng thái không xác định.
Xem: http://refspecs.linuxbase.org/LSB_3.0.0/LSB-PDA/LSB-PDA/iniscrptact.html
status $1 2> /dev/null | grep -q "^$1 start" > /dev/null 2> /dev/null
chỉ để đảm bảo nó im lặng.