วันศุกร์ที่ 7 สิงหาคม พ.ศ. 2552

ubuntu auto script startup

หลายคนที่เกี่ยวข้องกับ server นั้น จะเจอปัญหาที่ว่า เวลาที่เครื่อง server down ไปเนื่องจากสาเหตุอะไรก็แล้วแต่
คนดูแลนั้น ก็จะต้องมานั่ง start service ทีละตัวๆ แต่ถ้าวันนั้น มีการ down server บ่อยก็ต้องมานั่งทำงาน
ซ้ำ ๆ แบบนี้หลายรอบ พาลจะทำให้หลุดได้ ในกรณีที่มี application มากมายก่ายกอง บนนั้น

ในส่วนของ ubuntu หากเราต้องการให้ เมื่อ server มีการ run process ที่เราต้องการ ในตอนที่ server มี
การ start ขึ้นามาใหม่ ขั้นแรก ก็ให้เขียน shellscript file ที่ใช้สำหรับ start application ไว้ สักที่
เช่น สร้างเป็น(ในส่วนนี้ยังไม่ยกตัวอย่าง shellscript นะครับ ยังไม่ประเเด็น)

file : /home/user/script_start_app.sh

หลังจากนั้น ก็เข้ามายุ่งกับ

file : /etc/rc.local


เรียกมาแก้ไขโดย คำสั่ง

$ sudo vi /etc/rc.local

หลังจากนั้น ก็จะมี request password ให้ใส่ ก็ทำการใส่ก็จำเข้ามาหน้า edit ครับ
ที่ต้อง sudo เนื่องจากเป็นระบบหลักครับ อาจทำให้ ระบบเสียหายได้ถ้ามีการแก้ไข เปลี่ยนแปลง
คนแก้ไขจึงต้องเป็น admin เพื่อรับรองความปลอดภัย ระดับนึงครับ

ก็เพิ่ม recode ตามนี้ไป

echo 'start : /home/user/script_start_app.sh'
/home/user/script_start_app.sh >> /home/user/log/scriptstart.log

exit 0


** ในส่วน >> /path/logfile คือการให้ ข้อความ ที่เรา echo ไปออกไว้ที่ใหน

หลังจากนั้น ก็จะพบว่า เมื่อทำการ restart เครื่องแล้วก็จะมีการ start script ดังกล่าวเสมอ

เพิ่มเติม
กรณีที่เราไม่ต้องการให้การ start script เป็นสิทธิ root เนื่องจากเรามี user ที่จำเพราะเจาะจง หรือมีการใช้งานหลากหลาย ก็จะเพิ่มเติม ในส่วน script ดังนี้

su -l user -s /script.sh


ตัวอย่างเช่น

echo 'start : /home/user/script_start_app.sh'
su -l user1 -s /home/user/script_start_app.sh >> /home/user1/log/scriptstart.log
su -l user2 -s /home/user/script_start_app.sh >> /home/user2/log/scriptstart.log
su -l user2 -s /home/user/script_start_web.sh >> /home/user2/log/scriptstart.log

exit 0


และ อีกวิธีก็เป็น การใช้ crontab เข้ามาช่วยในการเช็ค ว่า ถ้า process ตาย ก็จะทำการ start โดยเช็คทุก ๆ
กี่นาทีตามกำหนด แต่จะอันตรายกว่า เนื่องจาก ถ้าapplication มี error ที่ร้ายแรง อาจทำให้มีการทำงานผิดพลาด
ซ้ำ ๆ เกิดขึ้น

ไม่มีความคิดเห็น: