GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mengetahui apakah httpd sedang berjalan atau tidak melalui baris perintah?

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?

Linux
  1. Bagaimana cara mengetahui apa yang dilakukan perintah Linux

  2. Linux – Bagaimana Cara Mengetahui Keluarga Arsitektur Intel Dari Baris Perintah?

  3. Menjalankan Pusat Perangkat Lunak Dari Baris Perintah Sebagai Root?

  1. Cara Mengubah Izin dan Pemilik melalui Command Line

  2. Versi Linux Apa yang Saya Jalankan? Inilah Cara Mengetahuinya

  3. Bagaimana cara mengetahui versi Bluez dari baris perintah?

  1. Bagaimana Cara Membunuh Baris Perintah Chromium Melalui Ssh?

  2. temukan:perintah tidak ditemukan

  3. Bagaimana cara mengetahui versi Linux yang saya jalankan?