จะทราบได้อย่างไรว่า httpd กำลังรันอยู่หรือไม่ผ่าน command line?


29

ฉันกำลังทำงานบนแผงควบคุมขนาดเล็กสำหรับเซิร์ฟเวอร์ของฉัน ฉันต้องการคำสั่งที่จะบอกว่าhttpdกำลังทำงานหรือหยุดทำงาน

อาจจะใช้รหัสเดียวกันสำหรับบริการอื่นเช่นกัน

คำตอบ:


28

คนส่วนใหญ่ใช้ httpd (Apache, Nginx และอื่น ๆ ) ผ่านระบบ init นี่เป็นกรณีที่หากคุณติดตั้งจากแพ็คเกจ ระบบเริ่มต้นเหล่านี้เกือบทั้งหมดมีวิธีการทำงานหากทำงานอยู่ ในกรณีของฉันฉันใช้ nginx ซึ่งจัดส่งสคริปต์ init แบบ SysV และยอมรับstatusอาร์กิวเมนต์เช่น:

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

เห็นได้ชัดว่าหากคุณใช้ httpd, สคริปต์หรือระบบ init อื่นคุณจะมีไวยากรณ์ที่แตกต่างกันเล็กน้อย แต่ถ้าคุณเปิดใช้ httpd ด้วยตัวเอง (ซึ่งรู้สึกว่าเป็นความคิดที่แย่ที่สุดในโลก) อาจใช้สคริปต์เริ่มต้นที่ดีและมีการจัดการที่จะช่วยให้คุณสามารถค้นหาสถานะ

คำตอบของ slmมีมากขึ้นเกี่ยวกับการสืบค้น init ประเภทนี้ แต่ปัญหาเกี่ยวกับความไว้วางใจนั่นเป็นเพียงการบอกคุณจริงๆว่ากระบวนการยังทำงานอยู่หรือไม่ กระบวนการหลักของ httpd ของคุณอาจทำงานได้ แต่ไม่ได้รับการล็อค มันสมเหตุสมผลมากที่จะข้ามการทดสอบแบบง่าย ๆ และไปที่การทดสอบเชิงพฤติกรรม

สิ่งหนึ่งที่เรารู้เกี่ยวกับ httpds คือพวกเขาฟัง โดยทั่วไปแล้วบนพอร์ต*:80แต่ถ้าคุณไม่ได้คุณสามารถปรับรหัสต่อไปนี้รหัส ที่นี่ฉันแค่awkเอาท์พุทของ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

นอกจากนี้เรายังสามารถตรวจสอบซึ่งกระบวนการทำงานมากเกินไปเพื่อให้แน่ใจว่าขวา httpd กำลังทำงาน เราสามารถตรวจสอบได้ทุกประเภท ขึ้นอยู่กับว่าคุณต้องการหวาดระแวงอย่างไร :)

แต่นั่นเป็นเพียงภาพสะท้อนของ httpd ต้องการทดสอบจริงเหรอ? ลองทดสอบกันดู

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

ฉันแค่ดูรหัสการตอบสนอง (200 หมายถึง "A-Okay!") แต่อีกครั้งเราสามารถขุดและทดสอบผลลัพธ์เพื่อให้แน่ใจว่ามันถูกสร้างขึ้นอย่างถูกต้อง

แต่สิ่งนี้ยังไม่ละเอียด คุณกำลังตรวจสอบlocalhostและกำลังรายงาน 200 ไม่มีอะไรผิดปกติใช่ไหม จะเกิดอะไรขึ้นถ้าบีเว่อร์เคี้ยวผ่านสายเคเบิลเครือข่ายที่จ่าย httpd (แต่ไม่ใช่ระบบที่เหลือ) แล้วไง?! คุณกำลังรายงานสถานะการออนไลน์เมื่อคุณหยุดทำงานจริง มีบางสิ่งที่ดูไม่เป็นมืออาชีพมากกว่าข้อมูลสถานะที่ไม่ถูกต้อง

ดังนั้นขอพูดคุยกับเซิร์ฟเวอร์ภายนอก (นึกคิดเกี่ยวกับการเชื่อมต่อที่แตกต่างกันโดยสิ้นเชิงในกาแล็คซี่อื่นไกลออกไปไกล) และขอให้สอบถามเซิร์ฟเวอร์ของเรา:

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

ณ จุดนี้ปัญหาใด ๆ ที่รายงานมานั้นเป็นปัญหาในแอป (ซึ่งอาจมีข้อผิดพลาดของตัวเอง - การจัดการและ - รายงานหรืออยู่ในตอนท้ายของลูกค้า)

การรวมกันของการทดสอบเหล่านี้สามารถช่วยตอกย้ำปัญหาที่เกิดขึ้นด้วย


3
เกิดอะไรขึ้นกับ httpd
Creek

@Creek คุณหมายความว่าอะไร
Oli

4
+1 สำหรับคำตอบที่ดี แต่ OP ถามเกี่ยวกับ httpd และคุณใช้ nginx
Creek

4
@Creek ในหนังสือของฉัน "httpd" หมายถึง "http daemon; a web server" ไม่เฉพาะเจาะจง คุณคิดว่าฉันควรจะทำสิ่งที่แตกต่างกันอย่างไร ฉันไม่รู้ว่าฉันจะตรวจสอบอย่างละเอียดได้อีกโดยไม่จำเป็นต้องซื้อเครื่องดื่มก่อน
Oli

3
ถ้าฉันสามารถซื้อเครื่องดื่มให้คุณเพื่อบอกว่าฉันจะคลาสสิก ฉันคิดว่า OP หมายถึงhttpd
Creek

25

คุณสามารถใช้คำสั่ง services สากลบน Linux distros ส่วนใหญ่

$ service <service> status

ตัวอย่าง

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

คำสั่งเดียวกันนี้สามารถใช้สำหรับบริการทั้งหมดที่ทำงานเป็นรายบุคคลหรือเพื่อค้นหาสถานะของบริการทั้งหมด

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

วิธีการต่าง ๆ ภายใน SysVinit, Systemd และพุ่งพรวดสำหรับรายชื่อบริการ

หากคุณใช้หนึ่งในกรอบการจัดการบริการทั่วไปคุณสามารถใช้วิธีการต่อไปนี้เพื่อแสดงรายการบริการภายในแต่ละรายการ

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  

พุ่งพรวด

$ 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

อ้างอิง


นี่คือคำตอบที่ถูกต้องเท่าที่ฉันรู้ แต่ OP ได้ยอมรับอีก :) :)
Ramesh

@Ramesh - ก็โอเคแล้ว Oli ก็ถูกต้องเหมือนกันมันลึกลับขึ้นมาอีกหน่อย
slm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.