สารบัญ:

สคริปต์การตรวจสอบบริการสำหรับเซิร์ฟเวอร์ Linux: 4 ขั้นตอน
สคริปต์การตรวจสอบบริการสำหรับเซิร์ฟเวอร์ Linux: 4 ขั้นตอน

วีดีโอ: สคริปต์การตรวจสอบบริการสำหรับเซิร์ฟเวอร์ Linux: 4 ขั้นตอน

วีดีโอ: สคริปต์การตรวจสอบบริการสำหรับเซิร์ฟเวอร์ Linux: 4 ขั้นตอน
วีดีโอ: การตั้งค่าเซิร์ฟเวอร์เบื้องต้นใน Ubuntu 18.04 ด้วยสคริปต์อัติโนมัติ 2024, พฤศจิกายน
Anonim
สคริปต์การตรวจสอบบริการสำหรับเซิร์ฟเวอร์ Linux
สคริปต์การตรวจสอบบริการสำหรับเซิร์ฟเวอร์ Linux

การมีระบบที่เสถียรและทำงานตลอดเวลา แม้ว่าคุณจะใช้ Linux อาจเป็นงานที่ยาก

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

ขั้นตอนที่ 1: ใช้วิธีการที่ให้ไว้โดยSystemd

อย่างที่คุณอาจทราบแล้วว่าระบบปฏิบัติการ Linux สมัยใหม่ส่วนใหญ่ใช้ systemd

หากคุณไม่คุ้นเคยกับ systemd นี่คือตามวิกิพีเดีย:

"… ระบบ init ที่ใช้ในลีนุกซ์ดิสทริบิวชันเพื่อบูตสแตรปพื้นที่ผู้ใช้และจัดการกระบวนการทั้งหมดในภายหลัง แทนที่จะเป็นระบบเริ่มต้นของ UNIX System V หรือ Berkeley Software Distribution (BSD) …"

ผู้คนจำนวนมากยังคงโต้เถียงกันว่าทำไมจึงจำเป็นต้องแทนที่ระบบ init แบบเก่าที่ดี ด้วยระบบการจัดการกระบวนการที่ซับซ้อนกว่านี้ แต่ในลิงก์ต่อไปนี้ อาจมีคำอธิบายที่ดี:

www.tecmint.com/systemd-replaces-init-in-l…

การปรับปรุงที่สำคัญที่สุดคือสามารถเรียกระบบได้เร็วกว่า init เนื่องจากการประมวลผลพร้อมกันและแบบขนานในการบูตแทนที่จะเป็นวิธีการแบบต่อเนื่องของ init

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

[หน่วย]คำอธิบาย=คำอธิบายของ applicationDocumentation=https://wikipedia.org/ After=local-fs.target network.target[Service]Type=simpleExecStart=/usr/sbin/applicationExecReload=/usr/sbin/application reloadExecStop=/ usr/sbin/application stopRestart=always[Install]WantedBy=multi-user.target

วางสิ่งเหล่านี้ลงในไฟล์ application.service ในโฟลเดอร์ /lib/systemd/system

มีการอธิบายสิ่งที่แต่ละตัวเลือกเหล่านี้ทำไว้ในลิงก์ต่อไปนี้:

access.redhat.com/documentation/en-US/Red_…

ในการเริ่มต้นแอปพลิเคชันของคุณ ให้ออกคำสั่งต่อไปนี้:

sudo systemctl start application.service

หมายเหตุ: สามารถละเว้นส่วนขยาย.service ได้

ในการหยุดแอปพลิเคชัน:

sudo systemctl หยุด application.service

หากไฟล์การกำหนดค่ามีการเปลี่ยนแปลงและคุณต้องการโหลดการตั้งค่าใหม่:

sudo systemctl รีโหลด application.service

ในการรีสตาร์ทแอปพลิเคชัน:

sudo systemctl รีสตาร์ท application.service

วิธีเปิดใช้งานการสตาร์ทอัตโนมัติเมื่อบู๊ต:

sudo systemctl เปิดใช้งาน application.service

หากเปิดใช้งานอยู่ ตัวจัดการกระบวนการ systemd จะพยายามเริ่มต้นแอปพลิเคชันตามการตั้งค่าที่ได้รับจากไฟล์ระบบ

หากต้องการปิดใช้งาน ให้ใช้คำสั่งเดียวกับด้านบน แต่มีพารามิเตอร์ 'disable'

หากคุณวาง Restart=always ในไฟล์บริการ systemd จะตรวจสอบกระบวนการและหากไม่พบในรายการกระบวนการ ระบบจะพยายามรีสตาร์ทโดยอัตโนมัติ

หากคุณวาง

รีสตาร์ทวินาที=30

หลังจากคำสั่งรีสตาร์ท จะรอ 30 วินาทีก่อนที่จะพยายามเริ่มกระบวนการใหม่ สิ่งนี้อาจมีประโยชน์ เนื่องจากความพยายามในการรีสตาร์ทอย่างต่อเนื่องของบริการ/แอปพลิเคชันที่ล้มเหลวอาจทำให้ระบบมีความต้องการสูง (การเขียนบันทึกข้อผิดพลาด ฯลฯ)

อย่างที่คุณเห็น systemd ได้จัดเตรียมวิธีการตรวจสอบกระบวนการไว้แล้ว อย่างไรก็ตาม ในบางกรณีอาจไม่เพียงพอ จะเกิดอะไรขึ้นหากกระบวนการไม่ออก (จะยังคงอยู่ในรายการกระบวนการ) แต่หยุดตอบสนอง ในกรณีนี้ เพื่อให้แน่ใจว่ากระบวนการทำงานจริง คุณอาจต้องตรวจสอบเพิ่มเติมเพื่อดำเนินการ

นี่คือที่ที่สคริปต์จากคำแนะนำนี้จะมีประโยชน์

ขั้นตอนที่ 2: การกำหนดค่าและการใช้ Service Checker Scripts

หากคุณต้องการควบคุมกระบวนการ/บริการที่ทำงานอยู่มากขึ้น สคริปต์เหล่านี้จะเป็นประโยชน์อย่างแน่นอน

เนื่องจากโค้ดมีขนาดใหญ่เล็กน้อย จึงอัปโหลดไปยัง github และสามารถพบได้ในที่เก็บต่อไปนี้:

github.com/trex2000/Service-Monitor-Scripts/blob/master/checkService.sh

'หัวใจ' ของแพ็คเกจทั้งหมดคือ

checkService.sh

ก่อนใช้งาน คุณต้องเปลี่ยนเส้นทางแบบเต็มไปยังโฟลเดอร์บริการ สามารถพบได้ที่จุดเริ่มต้นของสคริปต์

สคริปต์สามารถตรวจสอบกระบวนการต่างๆ และทำงานเพิ่มเติมได้ตามที่อธิบายไว้ด้านล่าง:

มันผ่านแต่ละไฟล์จากโฟลเดอร์ย่อย /services ที่มีนามสกุล.serv หรือ.check และจะตรวจสอบว่ามีกระบวนการที่ทำงานอยู่ที่เรียกว่า 'application' หรือไม่

หากไม่มีไฟล์ '.check' สำหรับแอปพลิเคชัน เฉพาะไฟล์ application.serv:

หากกระบวนการทำงานอยู่ จะถือว่ากระบวนการทำงานอยู่

หากกระบวนการนี้ไม่ได้ใช้งาน ก็จะเริ่มต้นบริการใหม่โดยใช้คำสั่งต่อไปนี้:

systemctl รีสตาร์ทแอปพลิเคชัน

ถ้าไฟล์.serv ว่างเปล่า!

หากไฟล์.serv ไม่ว่างเปล่าและมีสิทธิ์เรียกทำงาน ไฟล์จะพยายามเรียกใช้เป็นสคริปต์ BASH ธรรมดา

สิ่งนี้มีประโยชน์หากต้องทำสิ่งใดเพิ่มเติมนอกเหนือจากการเริ่มบริการใหม่

ตัวอย่างเช่น ในไฟล์ spamd.serv จาก repo ด้านบน ในกรณีที่บริการ spamd ไม่ทำงาน บริการ spamassassin จะต้องเริ่มใหม่แทน ซึ่งจะรีสตาร์ท spamd ด้วย การรีสตาร์ทเพียงสแปมจะไม่เพียงพอ

หนึ่งสามารถแก้ไขเนื้อหาของไฟล์ serv ดังกล่าวได้ตามความต้องการ

อีกตัวอย่างหนึ่งคือไฟล์ pcscd.serv ในกรณีนี้ กระบวนการอื่นๆ อีกหลายกระบวนการถูกรีสตาร์ท/หยุดทำงานเช่นกัน

หากมีไฟล์ตรวจสอบ หลังจากตรวจสอบว่ากระบวนการทำงานอยู่ ไฟล์สคริปต์นี้จะเรียกใช้ไฟล์สคริปต์นี้เพื่อทำการตรวจสอบเพิ่มเติมด้วย

ตัวอย่างเช่น สำหรับบริการ oscam เราได้สร้างไฟล์ตรวจสอบซึ่งพยายามเชื่อมต่อกับเว็บอินเตอร์เฟสเพื่อดูว่าสำเร็จหรือไม่ หากไม่เป็นเช่นนั้น แม้ว่าจะมีกระบวนการทำงานอยู่ บริการก็ไม่ตอบสนองและจำเป็นต้องเริ่มต้นใหม่ การเริ่มบริการใหม่จะต้องดำเนินการ/เรียกโดยไฟล์.check เอง

อีกตัวอย่างหนึ่งคือบริการ mediatomb DLNA

นี่คือเซิร์ฟเวอร์ขนาดเล็กที่ให้เนื้อหาวิดีโอ/เสียงแก่ไคลเอ็นต์ DLNA และออกอากาศเองบนเครือข่าย บางครั้งบริการหยุดทำงานและไม่สามารถค้นพบได้อีก แต่กระบวนการจะยังคงทำงานอยู่ เพื่อตรวจสอบว่าสามารถค้นพบบริการได้หรือไม่ มีการใช้ยูทิลิตี้ CLI ที่เรียกว่า gssdp-discover รหัสทั้งหมดที่ตรวจสอบเซิร์ฟเวอร์ DLNA ถูกวางไว้ในสคริปต์ mediatomb.check

นี่เป็นเพียงตัวอย่างเล็กๆ น้อยๆ เกี่ยวกับวิธีการใช้ไฟล์.serv และ.check ของคุณ

ในการตรวจสอบบริการใหม่ คุณต้องสร้าง.serv และหากจำเป็น ให้สร้างไฟล์ตรวจสอบและเขียนสคริปต์ที่เกี่ยวข้องไว้ข้างใน

หากเพียงตรวจสอบการมีอยู่ของกระบวนการหากเพียงพอ ไฟล์.serv ที่ว่างเปล่าก็เพียงพอแล้ว หากต้องทำการตรวจสอบเพิ่มเติม จะต้องสร้างไฟล์.check และต้องเขียนสคริปต์ขนาดเล็กเพื่อทำงาน

แน่นอน สคริปต์.sh จะต้องรันเป็นระยะ ดังนั้นงาน cron จะต้องถูกสร้างขึ้นด้วย:

#check เรียกใช้บริการทุก ๆ 5 นาที*/5 * * * * /var/bin/ServiceCheck/checkService.sh >/dev/null

ขั้นตอนที่ 3: ความคิดสุดท้าย

ฉันหวังว่าคุณจะพบว่าแพ็คเกจนี้มีประโยชน์เนื่องจากสามารถตรวจสอบกระบวนการ Linux ได้อย่างมากและหวังว่าจะช่วยลดเวลาหยุดทำงานของบริการของคุณ

อย่าลังเลที่จะอัปโหลดสคริปต์เพิ่มเติมไปยัง GitHub หากคุณสร้างสคริปต์ใหม่ เพียงแจ้งให้เราทราบ แล้วฉันจะเพิ่มคุณเป็นผู้ร่วมให้ข้อมูล

แนะนำ: