Kebanyakan orang menjalankan httpd mereka (Apache, Nginx, dll) melalui sistem init. Itu hampir pasti terjadi jika Anda telah menginstal dari sebuah paket. Hampir semua sistem init ini memiliki metode yang berfungsi jika sedang berjalan. Dalam kasus saya, saya menggunakan nginx yang mengirimkan skrip init bergaya SysV dan yang menerima status
argumen, seperti:
$ /etc/init.d/nginx status
* nginx is running
Jelas jika Anda menjalankan sistem httpd, skrip, atau init yang berbeda, Anda akan memiliki sintaks yang sedikit berbeda tetapi kecuali Anda meluncurkan sendiri httpd secara manual (yang terasa seperti ide terburuk di dunia), Anda mungkin menggunakan skrip start-up yang bagus dan terkelola yang memungkinkan Anda menanyakan status.
jawaban slm memiliki lebih banyak tentang kueri init semacam ini tetapi masalah dengan mempercayai itu hanya benar-benar memberi tahu Anda jika suatu proses masih berjalan. Proses utama httpd Anda bisa berjalan tetapi dalam beberapa cara menemui jalan buntu. Sangat masuk akal untuk melewatkan pengujian init sederhana dan beralih ke pengujian perilaku.
Satu hal yang kami ketahui tentang httpds adalah mereka mendengarkan. Biasanya pada port *:80
, tetapi jika milik Anda tidak, Anda dapat mengadaptasi kode mengikuti kode. Di sini saya hanya awk
menghasilkan output dari netstat
untuk melihat apakah mendengarkan di 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 yang mana proses berjalan juga untuk memastikan benar httpd sedang berjalan. Kami bisa melakukan segala macam pemeriksaan. Tergantung seberapa paranoid yang Anda inginkan :)
Tapi itu pun hanya cerminan dari httpd. Ingin benar-benar mengujinya? Mari kita menguji itu.
$ wget --spider -S "http://localhost" 2>&1 | awk '/HTTP\// {print $2}'
200
Saya hanya melihat kode tanggapan (200 berarti "A-Oke!"), tetapi sekali lagi, kita dapat menggali lebih dalam dan benar-benar menguji hasilnya untuk memastikan hasilnya dibuat dengan benar.
Tetapi bahkan ini tidak menyeluruh. Anda memeriksa localhost
dan itu melaporkan 200, tidak ada yang salah? Bagaimana jika berang-berang mengunyah kabel jaringan yang memasok httpd (tetapi bukan bagian sistem lainnya)? Lalu apa?! Anda melaporkan waktu aktif saat Anda benar-benar down. Beberapa hal terlihat lebih tidak profesional daripada data status yang salah.
Jadi mari kita berbicara dengan server eksternal (idealnya pada koneksi yang sama sekali berbeda, di galaksi lain yang sangat jauh) dan memintanya untuk menanyakan server kami:
$ ssh tank 'wget --spider -S "http://bert" 2>&1' | awk '/HTTP\// {print $2}'
200
Pada titik ini, masalah apa pun yang telah dilaporkan adalah masalah dalam aplikasi (yang dapat memiliki penanganan dan pelaporan kesalahannya sendiri, atau berada di pihak klien).
Kombinasi dari pengujian ini dapat membantu menentukan di mana masalahnya juga.
Anda dapat menggunakan perintah layanan secara universal di sebagian besar distro Linux.
$ service <service> status
Contoh
$ service httpd status
httpd (pid 23569) is running...
Perintah yang sama ini dapat digunakan untuk semua layanan yang berjalan secara individual atau untuk menemukan status semua layanan.
$ service --status-all
python is stopped
automount (pid 22457) is running...
Avahi daemon is not running
Avahi DNS daemon is not running
crond (pid 23577) is running...
gpm is stopped
hald is stopped
httpd (pid 23569) is running...
...
Berbagai metode dalam SysVinit, Systemd, dan Pemula untuk layanan daftar
Jika Anda menggunakan salah satu kerangka kerja pengelolaan layanan yang lebih umum, Anda dapat menggunakan metode berikut untuk mencantumkan layanan di dalamnya.
SysVinit
$ ls -l /etc/init.d/ | head -10
total 220
-rwxr-xr-x 1 root root 1422 Jan 13 2009 ajaxterm
-rwxr-xr-x 1 root root 3052 Apr 20 2012 autofs
-rwxr-xr-x 1 root root 1877 Apr 13 2011 avahi-daemon
-rwxr-xr-x 1 root root 1824 Apr 13 2011 avahi-dnsconfd
-rwxr-xr-x 1 root root 1926 Feb 22 2012 crond
-rwxr-xr-x 1 root root 14291 Dec 19 2011 functions
-rwxr-xr-x 1 root root 1778 Jan 6 2007 gpm
-rwxr-xr-x 1 root root 1586 Mar 5 2011 haldaemon
-rwxr-xr-x 1 root root 5742 Dec 19 2011 halt
Sistem
$ systemctl list-unit-files --type=service | head -10
UNIT FILE STATE
abrt-ccpp.service enabled
abrt-oops.service enabled
abrt-pstoreoops.service disabled
abrt-vmcore.service enabled
abrt-xorg.service enabled
abrtd.service enabled
accounts-daemon.service enabled
alsa-restore.service static
alsa-state.service static
Pemula
$ initctl list | head -10
avahi-daemon start/running, process 1090
mountall-net stop/waiting
nmbd start/running, process 2045
passwd stop/waiting
rc stop/waiting
rsyslog start/running, process 1088
tty4 start/running, process 1211
udev start/running, process 483
upstart-udev-bridge start/running, process 480
ureadahead-other stop/waiting
Referensi
- SysVinit ke Systemd Cheatsheet
- Perintah untuk mencantumkan layanan yang dimulai saat startup?