Skip to content

เขียน script เพื่อ ping process บน Linux

ส่วนหนึ่งของงานที่ทำอยู่ของผมมีโปรแกรมที่ต้องรันเอาไว้ตลอดเวลาเขียนด้วย Java รันเป็น executable jar แต่มีปัญหาคือเกิด exception และตายบ่อยต้องคอย start เองอยู่เรื่อยๆ

โจทย์ของผมคือโปรแกรมที่คอยตรวจว่าโปรแกรมต้องการยังรันอยู่หรือเปล่าถ้าไม่ได้รันอยู่ก็ start ขึ้นมา ผมเลยเขียน script เล็กๆ เพื่อทำงานตรงนี้จะได้ไม่ต้องมา monitor เอง

งานแค่นี้จริงๆ จบได้ด้วย shell script แต่ผมเขียนไม่คล่องเลยใช้ Python แทนได้โค้ดประมาณนี้

ไอเดียคือวนรอบทุกๆ 1 นาทีใช้คำสั่ง ps แสดงรายชื่อ process ที่ server รันอยู่ออกมาจากนั้นใช้คำสั่ง grep filter process ที่ต้องการออกมา ถ้ามีก็แสดงว่าโปรแกรมรันอยู่ ถ้าไม่มีแสดงว่าโปรแกรมตายไปแล้ว ให้ start ขึ้นมาใหม่

script ผมมี trick อยู่นิดหน่อยคือ

  1. ขั้นตอนการค้นหา process ใส่ grep -v grep เข้าไปด้วย เวลาแสดงชื่อ process จะได้ไม่แสดง process ของคำสั่ง grep ซึ่งเราไม่ต้องการออกมาด้วย
  2. ขั้นตอนการ start โปรแกรมถ้าไม่ต้องการให้แสดง stderr ออกมาก็ใส่ 2>/dev/null เพิ่มเข้าไป และถ้าต้องการรันเป็น background ก็ใส่ & เพิ่มเข้าไปท้ายคำสั่ง

script เล็กๆ แต่ช่วยเพิ่ม availability ของ services และระบบก็เพิ่มความเป็น automation ขึ้นมาจึ๋งนึงด้วย

Update: สำหรับ Linux และ Unix-like สามารถใช้ Monit ได้ครับ (แนะนำโดย อ.กิตติ์)

Be First to Comment

Leave a Reply

Your email address will not be published.