Masalah saya:
Saya sedang menulis skrip bash dan di dalamnya saya ingin memeriksa apakah layanan tertentu sedang berjalan.
Saya tahu cara melakukannya secara manual, dengan status $ service [service_name] status
.
Tetapi (terutama sejak pindah ke systemd) yang mencetak sejumlah besar teks yang sedikit berantakan untuk diuraikan. Saya berasumsi ada perintah yang dibuat untuk skrip dengan output sederhana atau nilai kembalian yang dapat saya periksa.
Tapi Googling sekitar hanya menghasilkan satu ton “Oh, hanya ps aux | grep -v grep | grep [service_name]
” hasil. Itu bukan praktik terbaik, bukan? Bagaimana jika contoh lain dari perintah itu berjalan, tetapi tidak ada yang dimulai oleh skrip init SysV?
Atau haruskah aku diam dan mengotori tanganku dengan sedikit pgrep?
Jawaban yang Diterima:
systemctl
memiliki is-active
subperintah untuk ini:
systemctl is-active --quiet service
akan keluar dengan status nol jika service
aktif, bukan nol sebaliknya, membuatnya ideal untuk skrip:
systemctl is-active --quiet service && echo Service is running
Jika Anda menghilangkan --quiet
itu juga akan menampilkan status saat ini ke output standarnya.
Seperti yang ditunjukkan oleh don_crissti, beberapa unit dapat aktif meskipun tidak ada yang berjalan untuk menyediakan layanan:unit yang ditandai sebagai "RemainAfterExit" dianggap aktif jika mereka keluar dengan sukses, idenya adalah bahwa mereka menyediakan layanan yang tidak memerlukan daemon (mis. mereka mengkonfigurasi beberapa aspek dari sistem). Unit yang melibatkan daemon hanya akan aktif jika daemon masih berjalan.