Supervisor เป็นระบบไคลเอนต์ / เซิร์ฟเวอร์ที่ใช้ในการควบคุมกระบวนการ UNIX จำนวนกระบวนการที่เฉพาะเจาะจงมากขึ้นที่เกี่ยวข้องกับโครงการหรือลูกค้า ตัวอย่างเช่นคุณสามารถใช้หัวหน้างานเพื่อวางไข่และตรวจสอบจำนวนคิวงานของเว็บแอปพลิเคชันของคุณโดยพลการ
ส่วนประกอบของระบบนี้คือ:
- supervisord:ส่วนเซิร์ฟเวอร์ของระบบ
- supervisorctl:อินเตอร์เฟสบรรทัดคำสั่งที่ใช้เพื่อโต้ตอบกับเซิร์ฟเวอร์
- เว็บเซิร์ฟเวอร์:เว็บเซิร์ฟเวอร์ที่เรียบง่ายและมีอินเตอร์เฟซผู้ใช้เว็บที่มีการทำงานขั้นพื้นฐานเมื่อเทียบกับsupervisorctl
- อินเตอร์เฟส XML-RPC:เซิร์ฟเวอร์ HTTP เดียวกับที่ใช้โดยเว็บไคลเอ็นต์ทำหน้าที่อินเตอร์เฟส XML-RPC ที่สามารถใช้เพื่อควบคุมโปรแกรมผู้ดูแล
ในบทช่วยสอนนี้เราจะติดตั้งผู้ควบคุมเวอร์ชันที่ทันสมัยที่สุดสาธิตวิธีวางไข่และจัดการโปรแกรมผ่านsupervisorctl
และกำหนดค่าเว็บอินเตอร์เฟสเพื่อจัดการโปรแกรมของเรา
การติดตั้งและการกำหนดค่าพื้นฐาน
เราจะติดตั้งผู้ควบคุมผ่านeasy_install
ซึ่งเป็นคุณสมบัติของ setuptools ของงูใหญ่
setuptools
ครั้งแรกที่ปรับปรุงรายการแพคเกจในท้องถิ่นของคุณและติดตั้งหลาม
sudo apt-get update && sudo apt-get install python-setuptools
ตอนนี้เราสามารถติดตั้งผู���ควบคุม
sudo easy_install supervisor
เมื่อการติดตั้งเสร็จสิ้นเราต้องสร้างไฟล์กำหนดค่าของเรา สร้างโฟลเดอร์ชื่อภายในsupervisor
/etc
sudo mkdir /etc/supervisor
จากนั้นดำเนินการดังต่อไปนี้
echo_supervisord_conf > /etc/supervisor/supervisord.conf
หากคุณไม่ได้ลงชื่อเข้าใช้ด้วยroot
ผู้ใช้คุณอาจได้รับPermission denied
ข้อผิดพลาด (แม้จะเป็นsudo
) นี่เป็นเพราะการเปลี่ยนเส้นทาง หากต้องการเอาชนะสิ่งนี้ให้ลงชื่อเข้าใช้ด้วยรูท
sudo su
จากนั้นคุณสามารถเรียกใช้คำสั่งอีกครั้ง
echo_supervisord_conf > /etc/supervisor/supervisord.conf
ตอนนี้คุณสามารถปล่อยให้root
ผู้ใช้ด้วยexit
คำสั่ง echo_supervisord_conf
คำสั่งถูกจัดให้โดยการติดตั้งผู้บังคับบัญชาของเรา
การกำหนดค่าพื้นฐาน
เปิด/etc/supervisor/supervisord.conf
ไฟล์และตรวจสอบเนื้อหา คุณจะทราบว่าไฟล์การกำหนดค่านี้เป็นไปตามINI
ไวยากรณ์และจะถูกแบ่งออกเป็นส่วน ๆ (แสดงโดยวงเล็บเช่นเดียวกับใน[section-name]
)
ในการเพิ่มโปรแกรมที่จะจัดการโดยหัวหน้างานเราเพียงแค่ต้องสร้าง[program]
ส่วนที่เหมาะสม อย่างไรก็ตามเพื่อหลีกเลี่ยงการสับสนกับไฟล์กำหนดค่าหลักทุกครั้งที่เราต้องการเพิ่ม (หรือเปลี่ยนแปลง) โปรแกรมเราจะใช้[include]
ส่วนนี้ ค้นหาส่วนนี้ยกเลิกการใส่เครื่องหมายข้อคิดเห็นจากนั้นแก้ไขเพื่อให้มีลักษณะดังต่อไปนี้
[include]
files=conf.d/*.conf
ตอนนี้สำหรับแต่ละโปรแกรมที่เราต้องการเพิ่มเราจะสร้าง.ini
ไฟล์ใน/etc/supervisor/conf.d/
ไดเรกทอรี ให้สร้างโฟลเดอร์นี้
sudo mkdir /etc/supervisor/conf.d
การสตาร์ทเซิร์ฟเวอร์ supervisor
ตามที่ระบุไว้ก่อนหน้านี้หัวหน้างานประกอบด้วยเซิร์ฟเวอร์และลูกค้าที่เชื่อมต่อกับมัน เพื่อให้สามารถจัดการและควบคุมโปรแกรมเราต้องเริ่มเซิร์ฟเวอร์ ในการดำเนินการดังกล่าวเราจะทำการลงทะเบียนเซิร์ฟเวอร์ supervisor ในsystemd
เพื่อให้เซิร์ฟเวอร์อาจเริ่มทำงานเมื่อเริ่มต้นระบบ
ในการทำเช่นนั้นให้สร้างไฟล์ชื่อsupervisord.service
ใน/etc/systemd/system
ไดเรกทอรี
sudo touch /etc/systemd/system/supervisord.service
เพิ่มเนื้อหาต่อไปนี้ลงในไฟล์
[Unit]
Description=Supervisor daemon
Documentation=http://supervisord.org
After=network.target
[Service]
ExecStart=/usr/local/bin/supervisord -n -c /etc/supervisor/supervisord.conf
ExecStop=/usr/local/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/local/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
Alias=supervisord.service
เปิดใช้งานบริการ supervisord
sudo systemctl start supervisord.service
ตราบใดที่ไฟล์บริการอยู่ใน/etc/systemd/system
ไดเรกทอรีมันจะเริ่มโดยอัตโนมัติเมื่อระบบเริ่มต้น
คุณสามารถตรวจสอบสถานะของบริการ
systemctl status supervisord.service
นอกจากนี้คุณสามารถตรวจสอบบันทึก
sudo journalctl -u supervisord.service
กำลังเพิ่มโปรแกรม
โปรแกรมที่ควบคุมโดยหัวหน้างานจะได้รับจาก[program]
ส่วนต่างๆ ในการกำหนดค่า สำหรับแต่ละโปรแกรมที่เราต้องการจัดการเราจะสร้างไฟล์การตั้งค่าแบบสแตนด์อโลนแจ้งเส้นทางคำสั่งปฏิบัติการตัวแปรสภาพแวดล้อมใด ๆ วิธีดำเนินการในกรณีที่ปิดเครื่อง
ก่อนอื่นเรามาสร้างสคริปต์ง่ายๆที่บันทึกการประทับเวลา สร้างไฟล์ชื่อhello_supervisor.sh
(ทุกที่ที่คุณต้องการเราจะอ้างอิงเส้นทางแบบเต็มของสคริปต์นี้)
touch hello_supervisor.sh
ตอนนี้ใส่เนื้อหาต่อไปนี้ลงไป
#!/bin/bash
while true
do
# Echo current timestamp to stdout
echo Hello Supervisor: `date`
# Echo 'error!' to stderr
echo An error ocurred at `date`! >&2
sleep 1
done
ตอนนี้ทำให้มันปฏิบัติการได้
chmod +x hello_supervisor.sh
ในทางปฏิบัติสคริปต์นี้ไม่มีประโยชน์อะไรมาก อย่างไรก็ตามเราสามารถใช้มันเพื่อแสดงพลังของหัวหน้างาน สร้างไฟล์คอนฟิกูเรชันที่สอดคล้องกันโดยรันต่อไปนี้
sudo touch /etc/supervisor/conf.d/hello_supervisor.conf
ตอนนี้ใส่เนื้อหาต่อไปนี้ลงในไฟล์นี้
[program:hello_supervisor]
command=/home/USER/hello_supervisor.sh
autostart=true
autorestart=true
stderr_logfile=/var/log/hello_supervisor.err.log
stdout_logfile=/var/log/hello_supervisor.out.log
หมายเหตุ: โปรดแทนที่USER
ด้วยชื่อผู้ใช้ของคุณ
เราจะตรวจสอบการกำหนดค่านี้ทีละขั้นตอน
[program:hello_supervisor]
command=/home/USER/hello_supervisor.sh
ประการแรกการกำหนดค่าเริ่มต้นด้วยการกำหนดโปรแกรมของชื่อhello_supervisor นอกจากนี้ยังแจ้งเส้นทางแบบเต็มของการปฏิบัติการที่จะเรียกใช้
autostart=true
บรรทัดนี้ระบุว่าโปรแกรมนี้ควรเริ่มโดยอัตโนมัติเมื่อผู้ดูแลเริ่มต้นขึ้น
autorestart=true
หากโปรแกรมหยุดทำงานด้วยเหตุผลใดก็ตามบรรทัดนี้จะแจ้งให้หัวหน้างานทราบเพื่อเริ่มกระบวนการใหม่โดยอัตโนมัติ
stderr_logfile=/var/log/hello_supervisor.err.log
stdout_logfile=/var/log/hello_supervisor.out.log
บรรทัดเหล่านี้กำหนดตำแหน่งไฟล์บันทึกสำหรับstderr
และstdout
ตามลำดับ
การจัดการโปรแกรม
ตอนนี้เราได้ติดตั้งและกำหนดค่าหัวหน้างานแล้วเราสามารถจัดการกระบวนการของเราได้
หลังจากเพิ่มโปรแกรมใหม่เราควรรันคำสั่งสองคำสั่งต่อไปนี้เพื่อแจ้งให้เซิร์ฟเวอร์ทำการอ่านไฟล์การกำหนดค่าอีกครั้งและใช้การเปลี่ยนแปลงใด ๆ
sudo supervisorctl reread
sudo supervisorctl update
ตอนนี้รันsupervisorctl
ไคลเอนต์
sudo supervisorctl
คุณจะได้รับการต้อนรับด้วยรายการการลงทะเบียนที่สำเร็จ คุณจะเห็นการเข้าถึงที่เรียกhello_supervisor
พร้อมกับRUNNING
สถานะ
hello_supervisor RUNNING pid 6853, uptime 0:22:30
supervisor>
พิมพ์help
สำหรับรายการคำสั่ง avaialable
supervisor> help
default commands (type help <topic>):
=====================================
add exit open reload restart start tail
avail fg pid remove shutdown status update
clear maintail quit reread signal stop version
สรุปเราสามารถstart
, stop
และrestart
โปรแกรมโดยผ่านชื่อโปรแกรมเป็นอาร์กิวเมนต์กับคำสั่งที่เกี่ยวข้อง
supervisor> stop hello_supervisor
hello_supervisor: stopped
supervisor> start hello_supervisor
hello_supervisor: started
supervisor> restart hello_supervisor
hello_supervisor: stopped
hello_supervisor: started
supervisor>
นอกจากนี้เรายังสามารถดูผลลัพธ์ของโปรแกรมด้วยtail
คำสั่ง
supervisor> tail hello_supervisor
Hello Supervisor: Mon Sep 25 19:27:29 UTC 2017
Hello Supervisor: Mon Sep 25 19:27:30 UTC 2017
Hello Supervisor: Mon Sep 25 19:27:31 UTC 2017
สำหรับstderr
เอาต์พุตคุณสามารถใช้tail
เช่นกัน
supervisor> tail hello_supervisor stderr
An error ocurred at Mon Sep 25 19:31:12 UTC 2017!
An error ocurred at Mon Sep 25 19:31:13 UTC 2017!
An error ocurred at Mon Sep 25 19:31:14 UTC 2017!
โดยเรียกใช้status
คำสั่งคุณสามารถดูสถานะของโปรแกรมที่ลงทะเบียนทั้งหมด
เมื่อเสร็จแล้วคุณสามารถออกจาก
supervisor> quit
ไคลเอนต์เว็บเซิร์ฟเวอร์
หากต้องการอนุญาตการเข้าถึงเว็บเซิร์ฟเวอร์ supervisord ให้เปิดไฟล์การกำหนดค่า supervisord และค้นหา[inet_http_server]
ส่วน
nano /etc/supervisor/supervisord.conf
ตอนนี้อัปเดตการกำหนดค่าส่วนนี้ด้วยต่อไปนี้
[inet_http_server]
port=*:9001
username=your_username
password=your_password
แทนที่your_username
และyour_password
มีสิทธิที่คุณต้องการบันทึกการเปลี่ยนแปลงและการบริการเริ่มต้นใหม่ supervisord ของคุณ
sudo systemctl restart supervisord.service
อย่าลืมอนุญาตให้TCP
เข้าถึงพอร์ต9001
ในไฟร์วอลล์ของคุณจากนั้นเข้าถึงhttp://{server-ip}:9001
จากเบราว์เซอร์ของคุณ เมื่อถามว่าให้ของคุณและusername
password
ตอนนี้คุณสามารถควบคุมความสำเร็จของคุณจากเว็บ
ข้อสรุป
เราได้ติดตั้งรุ่นขึ้นไปวันที่มากที่สุดของ supervisord เรียนรู้วิธีการกำหนดค่าระบบอัตโนมัติเริ่มต้นด้วย systemd supervisorctl
และทบทวนการใช้งานขั้นพื้นฐานของ สำหรับการตั้งค่าและการใช้งานที่สูงขึ้นกรณีที่คุณอาจจะหมายถึงเอกสาร supervisord อย่างเป็นทางการ