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.
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.
Jawaban:
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.
$ service <service> status
$ 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...
...
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