วันอาทิตย์ที่ 28 พฤษภาคม พ.ศ. 2560

ไม่ต้องเสียน้ำตากับการรันโปรแกรมสคริป php อัตโนมัติ supervisor แบบมืออาชีพ

หลายครั้งพัฒนาโปรแกรมเรียบร้อยแล้ว นำไปใช้งานจริงกลับทำงานได้เพียงแค่สักครู่เดียว โปรแกรมก็หยุดทำงานลง ไม่สามารถทำให้ทำงานแบบต่อเนื่องตลอดเวลาได้ แนวทางสมัยก่อน ๆ ที่ผู้เขียนนิยมใช้ก็คือทำโปรแกรมให้รันแบบเบื้องหลัง(daemon) และใช้ cron ตั้งเวลาสำหรับตรวจสอบโพรเซสว่าทำงานอยู่หรือไม่ ทุก ๆ 5 - 10 นาทีเป็นต้น

ผู้เขียนเองทดสอบการใช้งานโปรแกรมสำหรับใช้งานคิว(queue) ที่ใช้ไลบรารี่ pheanstalk อยู่พบว่าการทำงานในแบบเบื้องหลังหรือตั้งเวลาให้ทำงานไม่สามารถใช้งานได้ โปรแกรมสคริป php จะหยุดทำงานไม่ต่อเนื่อง เสียเวลาไปหลายวันก็ยังไม่สามารถหาวิธีการสำหรับตรวจสอบสคริป php ที่สร้างใหม่ให้ทำงานตลอดเวลา รวมทั้งบันทึกล็อกไฟล์ข้อมูลการทำงานได้เองแบบอัตโนมัติด้วย ยิ่งเพิ่มงานให้ยุ่งยากมากขึ้นเป็นสองสามเท่าตัว

ไม่ต้องเสียน้ำตากับการรันโปรแกรมสคริป php อัตโนมัติ แบบมืออาชีพนี้จะติดตั้งซอฟต์แวร์ที่เขียนโดยภาษา Python ไว้คอยตรวจสอบดูเซอร์วิสว่าทำงานอยู่หรือไม่ หากหยุดทำงานก็สั่งสตาร์ทเซอร์วิสใหม่ให้อัตโนมัติ แบบมืออาชีพ ที่สำคัญใช้งานง่ายมาก ติดตั้งโปรแกรมก็ง่ายด้วย นี่แหล่ะเยี่ยมที่สุดสำหรับงานนี้


 ขั้นตอนที่ 1 สำหรับโปรแกรมที่ใช้งานก็คือโปรแกรม supervisor การติดตั้งบนเครื่องลีนุกส์เพียงแค่พิมพ์คำสั่งตามที่ผู้เขียนแนบให้แค่นั้น

#apt-get install supervisor

ขั้นตอนที่ 2 กำหนดค่าคอนฟิกให้กับโปรแกรม ตามตัวอย่างผู้เขียนต้องการรันสคริป php แบบอัตโนมัติ แบบตรวจสอบเซอร์วิสให้ด้วยหากหยุดทำงานก็เริ่มต้นสตาร์ทให้ใหม่ด้วย ตามตัวอย่างให้สร้างไฟล์ชื่อ pheanstalk.conf ไว้ในโฟลเดอร์ /etc/supervisor/conf.d/ ข้อสำคัญที่สุดห้ามรันโปรแกรมแบบ daemon หรือแบบเบื้องหลัง

[program:pheanstalkget.php]
command=/usr/bin/php /var/www/tpit/gprmc/pheanstalk/pheanstalkget.php              ; the program (relative uses PATH, can take args)
process_name=%(program_name)s ; process_name expr (default %(program_name)s)
numprocs=1                    ; number of processes copies to start (def 1)
;directory=/tmp                ; directory to cwd to before exec (def no cwd)
umask=022                     ; umask for process (default None)
priority=999                  ; the relative start priority (default 999)
autostart=true                ; start at supervisord start (default: true)
autorestart=true        ; whether/when to restart (default: unexpected)
startsecs=1                   ; number of secs prog must stay running (def. 1)
startretries=3                ; max # of serial start failures (default 3)
exitcodes=0,2                 ; 'expected' exit codes for process (default 0,2)

ขั้นตอนที่ 3 เป็นการเริ่มใช้งานโปรแกรม supervisor และการควบคุมโปรแกรมสคริป php โดยใช้โปรแกรม supervisorctl

#/etc/init.d/supervisor start
# supervisorctl
pheanstalkget.php                   RUNNING   pid 30700, uptime 0:16:55
supervisor>


ผู้เขียนได้ทำการทดสอบการทำงานพบว่าได้ผลเป็นที่น่าพึงพอใจในเบื้องต้น แต่อย่างไรก็ตามยังต้องใช้เวลาพิสูจน์การทำงานจริงอีกระยะหนึ่ง ผลการทดลองจะได้นำมาอัพเดทกันอีกครั้งหนึ่งในส่วนของเนื้อหา เรื่องราวดี ๆ อย่างนี้ยังมีให้พบเห็นกันได้ที่ gpstrackingthailand.com อีกเวบไซต์หนึ่งที่ผู้เขียนได้มีโอกาสพัฒนาขึ้นมาเอง สำหรับข้อมูลเนื้อหาสาระดี ๆ จากผู้ให้บริการระบบจีพีเอสติดตามรถยนต์ ส่วนเนื้อหาเรื่องถัดไปที่พลาดไม่ได้ก็คือการรันโปรแกรมคิว beanstalk พร้อมกับโปรแกรมไลบรารี่ pheanstalk สำหรับบริหารจัดการคิวแบบง่าย ๆ สไตล์ที่เราถนัด ทำจริง ประสบการณ์จริง เพื่อการพัฒนาองค์ความรู้แบบยั่งยืน






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

แสดงความคิดเห็น