จะลองเริ่มบริการได้อย่างไรถ้าไม่ได้ทำงานอยู่? (Linux)


3

ฉันรู้ว่าฉันต้องนับจำนวนอินสแตนซ์ที่กำลังทำงาน:

ps x | grep apache2 | wc -l 

ผลถ้ามันทำงาน: 2, หรืออื่น ๆ: 1

ฉันก็รู้ว่ามีคำสั่งที่เรียกว่า test ที่ฉันสามารถใช้เพื่อทำการตรวจสอบ แต่ฉันไม่รู้วิธีใช้ test กับ wc


W dist ich distro?
Ignacio Vazquez-Abrams

1
"/ sbin / สถานะ apache2" จะปรากฏขึ้นหากบริการนั้นเริ่มต้นหรือหยุด
Chau Chee Yang

@Ignacio ubuntu
Jader Dias

คำตอบ:


5

สคริปต์เริ่มต้นในการกระจาย Linux ส่วนใหญ่จัดการสิ่งนี้โดยการบันทึก ID กระบวนการ ของบริการ (daemon) เมื่อพวกเขาเปิดมัน

โดยทั่วไปแล้ว PID เหล่านี้จะถูกเก็บไว้ใน /var/run/. ตัวอย่างเช่นในระบบของฉัน Apache2 เก็บไว้เป็น ID กระบวนการดั้งเดิมหรือผู้ปกครอง (มีประโยชน์สำหรับกระบวนการก่อนแยก) ใน /var/run/apache2.pid. ดังนั้นคุณสามารถส่งสัญญาณเช่น SIGHUP หรือ SIGSTOP ไปยังกระบวนการเพื่อส่งสัญญาณการกำหนดค่าโหลดใหม่หรือหยุดบริการ (daemon)

หมายเหตุหนึ่งที่จะช่วยคุณได้ ps ax การค้นหากระบวนการสไตล์คือการใช้เคล็ดลับเล็ก ๆ น้อย ๆ เพื่อหลีกเลี่ยงรูปแบบการแสดงออกปกติของ grep ที่ใช้สำหรับการจับคู่ เช่น. ps ax | grep [a]pache2 | wc -l

man test ช่วยให้คุณมีพื้นฐานของ test คำสั่ง สำหรับงานง่าย ๆ ในเชลล์สคริปต์ควรหลีกเลี่ยงการพึ่งพาเชลล์ที่คุณใช้ ปกติสำหรับ การเขียนสคริปต์ขั้นพื้นฐาน การเขียนสคริปต์ที่กำหนดเป้าหมาย Bourne Shell ( /bin/sh ) ขอแนะนำเนื่องจากสิ่งนี้มีแนวโน้มที่จะเป็นตัวหารร่วมที่ได้รับความนิยมสูงสุด

#!/bin/sh

RC= `ps ax | grep [a]pache2 | wc -l`

if [ $RC -gt 0 ]; then
  kill -SIGSTOP `cat /var/run/apache2.pid`
fi

เป็นความคิดที่ฉลาดที่จะใช้ grep [a]pache2! ขอบคุณสำหรับสิ่งนั้น
n.st

1

หากคุณกำลังทำงานกับทุบตีคุณสามารถทำได้ด้วยเงื่อนไข การตรวจสอบ :

#/bin/bash
num="1"
if [ $num -eq "1" ]; then
        echo "got 1"
fi

if [ $num -eq "2" ]; then
        echo "got 2"
fi

ทำอย่างไร num เท่ากับ ps x | grep apache2 | wc -l ?
Jader Dias

@Jader ฉันได้รวมตัวอย่างไว้ในคำตอบแล้ว
mctylr

1
if (( $(ps x | grep [a]pache2 | wc -l) > 0 ))
then
    do_something
else
    do_something_else
fi

หรือ

case $(ps x | grep [a]pache2 | wc -l) in
    0)
        do_zero_thing
        ;;
    1)
        do_one_thing
        ;;
    *)
        do_default_thing
        ;;
esac

วงเล็บเหลี่ยมที่ใช้ในวิธีนั้นใน grep คำสั่งไม่ใส่คำสั่ง grep ตัวเองจากการรวมอยู่ในเอาท์พุทของตัวเอง สิ่งนี้จะทำให้กระบวนการนับเป็น 0 หาก apache ไม่ทำงาน

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