คราวที่แล้ว blog เรื่อง systemd เกี่ยวกับการใช้งานเบื้องต้นไป คิดว่าหลายท่านอาจจะเริ่มใช้งานกันได้แล้ว ปัญหาของ systemd ยังไม่จบแค่นั้น สำหรับท่านที่เขียน init script สำหรับ start, stop, restart service เอง แล้วพยายามจะใช้ init script เดิมปัญหาเกิดขึ้นทันที อันนี้ซวยสุด เพราะผมเองก็เขียน init script เหมือนกัน T_T ครั้งนี้ก็เลยมา blog เรื่อง unit file กันสักหน่อย เอ่อ…ถ้าหักดิบใช้ CoreOS ไปเลยทุกอย่างจะจบ โดนบังคับโดยบริยาย ไม่มีอะไรให้ใช้นอกจาก systemd ไม่มี unit file ก็ต้องเขียนผ่าน cloud init เอง เรียกได้ว่านอนหลับฝันเป็น systemd เลยทีเดียว ครั้งที่แล้วได้ลองจัดการ service ผ่าน systemd โดยใช้ systemctl ไปบ้างแล้ว ครั้งนี้ก็ต้องเขียน unit file แล้วล่ะครับ
ขอยกตัวอย่าง node.js ก็แล้วกันง่ายดี node.js ทำงานเป็น httpd service ได้ระบุ port ผ่านไฟล์ config ซึ่งเราก็จะไม่แก้ไขเหมือนเดิม ใช้ port 3000 ของที่มีมานั่นแหละ :) มาสร้าง project กันก่อน ถ้ามี node.js และ express generator ก็สร้างตัวอย่างง่ายๆ ขึ้นมาได้เลย
mkdir hello
cd hello
express --ejs
npm install
เราจะได้ โครงคร่าวๆ ของ express มาแล้ว แก้ไข view สักหน่อย กันหลงนะครับ จากนั้นลอง start node ดูครับ
./bin/www
เราจะพบว่า node.js ทำงานแล้วอยู่ที่ port 3000 ลองเปิด browser ดูก็ได้ :) ปัญหาคือเราจะเขียน unit file ให้เจ้า service นี้อย่างไร ก่อนอื่นตั้งชื่อให้ดูดีก่อน ผมจะเรียก service นี้ว่า hello ก็แล้วกัน จากนั้น สร้างไฟล์ hello.service ลงใน /etc/systemd/system/ ใส่ข้อมูลลงไปดังนี้
จะสังเกตได้ว่า unit file จะมีโครงสร้างง่ายๆ เริ่มจาก [Unit] บอกว่าเป็น unit file ของอะไร ทำงานตอนไหน จากนั้นจะเข้าสู่ [Service] ซึ่งบ่งบอกว่าเป็น Service ทำงานได้ยังไง ต้อง Start ยังไง Log ยิงไปที่ไหน ฯลฯ ดูตามตัวอย่างได้ เมื่อมี unit file ใหม่หรือแก้ไข unit file จะต้องสั่ง reload daemon ของ systemd ใหม่ทุกครั้งดังนี้
systemctl daemon-reload
จากนั้นลอง hello service ของเราได้เลย เช่น
ตรวจสอบสถานะ service
systemctl status hello.service
สั่ง start service ทุกครั้งเมื่อบูตเครื่อง
systemctl enable hello.service
สั่ง start service
systemctl start hello.service
ตัวอย่าง
ลองเปิดเว็บดูว่า service start แล้วจริงๆ
เล่น systemd พอสนุกสนาน อยากรู้เพิ่มเติมอ่านรายละเอียดเกี่ยวกับ systemd ได้ที่ เว็บโครงการ systemd ครับ