Httpd'nin çalışıp çalışmadığını komut satırı üzerinden nasıl bulabilirim?


29

Sunucum için küçük bir kontrol panelinde çalışıyorum. httpdÇalışıyor veya duruyor mu diyecek bir komuta ihtiyacım var .

Muhtemelen aynı servis diğer servisler için de kullanılacaktır.

Yanıtlar:


28

Çoğu insan httpd'sini (Apache, Nginx, etc) bir init sistemiyle çalıştırır. Bir paketten yüklediyseniz bu kesinlikle kesinlikle durum. Neredeyse tüm bu init sistemlerinin çalışıyorsa çalışacak bir yöntemi vardır. Benim durumumda, bir SysV tarzı init betiği gönderen ve şöyle bir statusargüman kabul eden nginx kullanıyorum :

$ /etc/init.d/nginx status
 * nginx is running

Açıkçası, farklı bir httpd, script veya init sistemi kullanıyorsanız, biraz farklı bir sözdizimine sahip olacaksınız ancak httpd'yi kendiniz başlatmıyorsanız (dünyanın en kötü fikri gibi), muhtemelen durumu sorgulamanıza izin veren iyi yönetilen bir başlangıç ​​betiği kullanıyor olabilirsiniz.

slm'ın cevabı bu tür init sorgulaması hakkında daha fazla bilgiye sahip ancak buna güvenme sorunu yalnızca bir işlem hala çalışıyorsa size söyler. Httpd’nizin ana işlemi çalışıyor olabilir , ancak bir şekilde kilitlendi. Basit init testlerini atlamak ve davranış testlerine geçmek çok mantıklıdır.

Httpds hakkında bildiğimiz bir şey dinliyorlar. Genellikle bağlantı noktasında *:80, ancak sizinki değilse, kodu aşağıdaki kodu uyarlayabilirsiniz. Burada doğru bağlantıyı dinleyip dinlemediğini görmek awkiçin çıktısını alıyorum netstat.

$ 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

Doğru httpd'nin çalıştığından emin olmak için hangi işlemin çalıştığını da kontrol edebiliriz . Her türlü kontrolü yapabiliriz. Ne kadar paranoyak olmak istediğine bağlı :)

Ama bu bile sadece bir httpd yansımasıdır. Gerçekten denemek ister misin? Hadi test edelim .

$ wget --spider -S "http://localhost" 2>&1 | awk '/HTTP\// {print $2}'
200

Ben sadece cevap koduna bakıyorum (200 "A-Tamam!" Anlamına geliyor) fakat yine de, doğru bir şekilde üretildiğinden emin olmak için çıktıyı test edip test edebiliriz.

Ama bu bile o kadar ayrıntılı değil. Kontrol ediyorsun localhostve rapor ediyor 200, yanlış bir şey yok mu? Kunduzlar httpd'yi (ancak sistemin geri kalanını değil) besleyen ağ kablosu üzerinden çiğnenmişse? Sonra ne?! Gerçekte moralsizken çalışma süresini rapor ediyorsunuz. Çok az şey yanlış durum verilerinden daha profesyonel gözüküyor.

Öyleyse harici bir sunucuyla konuşalım (ideal olarak tamamen farklı bir bağlantıda, uzaktaki başka bir galaksideki) ve sunucumuzu sorgulamasını isteyelim:

$ ssh tank 'wget --spider -S "http://bert" 2>&1' | awk '/HTTP\// {print $2}'
200

Bu noktada, bildirilen herhangi bir sorun uygulama içi sorunlardır (kendi hata işleme ve raporlama işlemlerine sahip olabilirler veya müşterinin sonundadırlar).

Bu testlerin bir kombinasyonu, sorunun da nerede olduğunu tespit etmenize yardımcı olabilir.


3
httpd'ye ne oldu?
Creek,

@Creek Ne demek istiyorsun?
Oli,

4
İyi bir cevap için +1, ancak OP httpd'yi istedi ve siz nginx kullandınız
Creek

4
@Creek Kitaplarımda "httpd", "http daemon; bir web sunucusu" anlamına geliyor. Belirli bir değil. Sence farklı ne yapmalıyım? Önce bir içki almaya ihtiyaç duymadan bir tanesini nasıl daha iyi kontrol edebileceğimi bilmiyorum.
Oli,

3
Sana söyleyeceğim için bir içki alabilirsem, klasik. Sanırım OP, Apache’nin httpd
Creek

25

Services komutunu evrensel olarak çoğu Linux dağıtımında kullanabilirsiniz.

$ service <service> status

Örnek

$ service httpd status
httpd (pid  23569) is running...

Bu aynı komut, bireysel olarak çalışan tüm servisler için veya tüm servislerin durumunu bulmak için kullanılabilir.

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

Hizmetleri listelemek için SysVinit, Systemd ve Upstart içindeki çeşitli yöntemler

Daha tipik hizmet yönetimi çerçevelerinden birini kullanıyorsanız, her birinin içindeki hizmetleri listelemek için aşağıdaki yöntemleri kullanabilirsiniz.

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  

sonradan görme

$ 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

Referanslar


Bu bildiğim kadarıyla doğru cevap. Ancak OP diğerini kabul etmişti :)
Ramesh

@Ramesh - Sorun değil, Oli's A da doğru, biraz daha ezoterik.
slm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.