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


29

Saya sedang mengerjakan panel kontrol kecil untuk server saya. Saya memerlukan perintah yang akan mengatakan apakah httpdsedang berjalan atau berhenti.

Mungkin akan menggunakan kode yang sama untuk layanan lain juga.

Jawaban:


28

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 statusargumen, 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 awking output dari netstatuntuk 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 localhostdan 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.


3
apa yang terjadi dengan httpd?
Creek

@Creek Apa maksudmu?
Oli

4
+1 untuk jawaban yang baik tetapi OP bertanya tentang httpd dan Anda menggunakan nginx
Creek

4
@Creek Dalam buku saya, "httpd" berarti "http daemon; server web". Bukan yang spesifik. Menurut Anda apa yang harus saya lakukan secara berbeda? Saya tidak tahu bagaimana saya bisa memeriksanya lebih teliti tanpa perlu membeli minuman dulu.
Oli

3
Jika saya bisa membelikan Anda minuman untuk mengatakan bahwa saya akan, klasik. Saya pikir OP berarti apache Ini httpd
Creek

25

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 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

$  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

Systemd

$ 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


Ini adalah jawaban yang benar sejauh yang saya tahu. Tetapi OP telah menerima yang lain :)
Ramesh

@ Ramesh - tidak apa-apa, Oli A juga benar, hanya sedikit lebih esoteris.
slm
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.