ฉันกำลังทำงานบนแผงควบคุมขนาดเล็กสำหรับเซิร์ฟเวอร์ของฉัน ฉันต้องการคำสั่งที่จะบอกว่าhttpd
กำลังทำงานหรือหยุดทำงาน
อาจจะใช้รหัสเดียวกันสำหรับบริการอื่นเช่นกัน
ฉันกำลังทำงานบนแผงควบคุมขนาดเล็กสำหรับเซิร์ฟเวอร์ของฉัน ฉันต้องการคำสั่งที่จะบอกว่าhttpd
กำลังทำงานหรือหยุดทำงาน
อาจจะใช้รหัสเดียวกันสำหรับบริการอื่นเช่นกัน
คำตอบ:
คนส่วนใหญ่ใช้ 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
ณ จุดนี้ปัญหาใด ๆ ที่รายงานมานั้นเป็นปัญหาในแอป (ซึ่งอาจมีข้อผิดพลาดของตัวเอง - การจัดการและ - รายงานหรืออยู่ในตอนท้ายของลูกค้า)
การรวมกันของการทดสอบเหล่านี้สามารถช่วยตอกย้ำปัญหาที่เกิดขึ้นด้วย
คุณสามารถใช้คำสั่ง 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
$ 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