Saya sedang mengerjakan panel kontrol kecil untuk server saya. Saya memerlukan perintah yang akan mengatakan apakah httpd
sedang berjalan atau berhenti.
Mungkin akan menggunakan kode yang sama untuk layanan lain juga.
Kebanyakan orang menjalankan httpd (Apache, Nginx, dll) melalui sistem init. Itu hampir pasti terjadi jika Anda telah menginstal dari suatu paket. Hampir semua sistem init ini memiliki metode yang berfungsi jika sedang berjalan. Dalam kasus saya, saya menggunakan nginx yang mengirimkan skrip init SysV-style dan yang menerima status
argumen, seperti:
$ /etc/init.d/nginx status
* nginx is running
Jelas jika Anda menjalankan httpd, skrip atau sistem init yang berbeda, Anda akan memiliki sintaks yang sedikit berbeda tetapi kecuali jika Anda sendiri yang meluncurkan httpd (yang terasa seperti ide terburuk di dunia), Anda mungkin menggunakan skrip start-up yang dikelola dengan baik yang akan memungkinkan Anda untuk menanyakan status.
Jawaban slm memiliki lebih banyak tentang init semacam ini tetapi masalah dengan mempercayai itu hanya benar-benar memberitahu Anda jika suatu proses masih berjalan. Proses utama httpd Anda bisa berjalan tetapi dalam beberapa cara menemui jalan buntu. Masuk akal untuk melewati tes init sederhana dan beralih ke tes perilaku.
Satu hal yang kita ketahui tentang httpds adalah mereka mendengarkan. Biasanya pada port *:80
, tetapi jika milik Anda tidak, Anda dapat menyesuaikan kode dengan kode berikut. Di sini saya hanya awk
ing output dari netstat
untuk melihat apakah itu mendengarkan pada port yang benar.
$ sudo netstat -ntlp | awk '$4=="0.0.0.0:80"'
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2079/nginx
Kami juga dapat memeriksa proses mana yang berjalan juga untuk memastikan httpd yang tepat berjalan. Kita bisa melakukan segala macam cek. Tergantung bagaimana paranoid yang Anda inginkan :)
Tetapi bahkan itu hanya refleksi dari httpd. Ingin benar-benar mengujinya? Baiklah mari kita mengujinya .
$ wget --spider -S "http://localhost" 2>&1 | awk '/HTTP\// {print $2}'
200
Saya hanya melihat kode respons (200 berarti "A-Oke!") Tetapi sekali lagi, kita bisa menggali dan benar-benar menguji output untuk memastikan itu dibuat dengan benar.
Tetapi bahkan ini tidak menyeluruh. Anda memeriksa localhost
dan melaporkan 200, tidak ada yang salah? Bagaimana jika berang-berang mengunyah kabel jaringan yang memasok httpd (tetapi tidak pada sisa sistem)? Lalu apa?! Anda melaporkan waktu aktif saat Anda benar-benar tidak aktif. Beberapa hal terlihat lebih tidak profesional daripada data status yang salah.
Jadi mari kita bicara ke server eksternal (idealnya pada koneksi yang sama sekali berbeda, di galaksi lain jauh, jauh) dan memintanya untuk menanyakan server kami:
$ ssh tank 'wget --spider -S "http://bert" 2>&1' | awk '/HTTP\// {print $2}'
200
Pada titik ini, setiap masalah yang dilaporkan adalah masalah dalam aplikasi (yang dapat memiliki kesalahan penanganan dan pelaporan sendiri, atau masalah tersebut ada di pihak klien).
Kombinasi dari tes-tes ini dapat membantu menentukan di mana masalahnya juga.
Anda dapat menggunakan perintah layanan secara universal di sebagian besar distro Linux.
Contoh
Perintah yang sama ini dapat digunakan untuk semua layanan yang berjalan secara individual atau untuk menemukan status semua layanan.
Berbagai metode dalam SysVinit, Systemd, dan Pemula untuk daftar layanan
Jika Anda menggunakan salah satu kerangka kerja manajemen layanan yang lebih umum, Anda dapat menggunakan metode berikut untuk membuat daftar layanan dalam masing-masing.
SysVinit
Systemd
Pemula
Referensi
sumber