2015-05-05 17 views
6

Tôi đang viết một tập lệnh để tự động cài đặt máy chủ liên kết trên bản phân phối CentOs 7.Kiểm tra xem đơn vị systemd có đang hoạt động trong tập lệnh bash hay không

Tôi bị kẹt với systemctl status, bởi vì nó không tạo ra mã lỗi (đúng vậy, vì trạng thái không phải là lỗi) tôi có thể sử dụng.

Điều tôi muốn là kiểm tra xem dịch vụ có được khởi động hay không (hoạt động). Cách tốt nhất và hiệu quả để làm điều này là gì?

+0

Trên thực tế 'systemctl status' không trả lại trạng thái - như tôi đã tìm thấy khi làm' systemctl tình trạng openvpn @<> '. Trường hợp các giá trị là '0' để chạy, và' 3' cho dừng lại. Tuy nhiên, lệnh này là tương tác: (Do đó các @lars đề xuất 'systemctl là hoạt động' là con đường để đi, và tốt hơn là lấy' -q' như được gợi ý bởi @palswim –

Trả lời

25

Cách tốt nhất để kiểm tra xem một dịch vụ đang hoạt động là bằng lệnh systemctl is-active:

# systemctl start sshd 
# systemctl is-active sshd >/dev/null 2>&1 && echo YES || echo NO 
YES 
# systemctl stop sshd 
# systemctl is-active sshd >/dev/null 2>&1 && echo YES || echo NO 
NO 
+0

Cảm ơn, đó chính xác là những gì tôi đang tìm kiếm! có vẻ như tôi đã bỏ lỡ nó trong sổ tay. ^^ ' – math

+0

những thứ tốt, cảm ơn bạn! –

+9

Bạn cũng có thể sử dụng công tắc '-q' để bạn không phải chuyển hướng đầu ra:' systemctl -q is-active sshd' – palswim

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