ผมว่าหลายคนที่จัด RHEL 7 หรือ CentOS 7 โดยที่ไม่ได้ใช้ Fedora 20 และไม่ได้เป็นสาวก Fedora มาก่อนจะไม่ทราบว่าอีก release ถัดไปของ RHEL, CentOS, Scientifix Linux จะเจออะไรใหม่บ้าง เพราะของเล่นใหม่ๆ จะไปโหล่ใน Fedora ก่อนอย่างน้อย 2 ปี จึงจะย้ายเข้ามาใน RHEL จากนั้นถ่ายทอดไปยัง CentOS, Scientifix Linux และ Linux Distribution ที่พัฒนาต่อจาก RHEL หรือ CentOS ตามลำดับ การเปลี่ยนแปลงอย่างสายฟ้าแลบใน RHEL 7 ไม่ได้เกิดอย่างสายฟ้าแลบหรอกครับ เขาใช้กันมานานแล้ว สำหรับการเปลี่ยนแปลงที่รอมานาน คือ systemd ที่มาสดใหม่, Docker ที่คุม security ด้วย SELinux ทำให้ เรื่อง security บน Docker ที่หลายคนถากถางกันมาเกือบ 2 ปีนี้หยุดได้แล้ว เพราะนอกจากจะคุม syscall ได้แล้วยังคุมในระดับ SELinux ด้วย ส่วน feature อื่นๆ ไม่ค่อยได้สนใจมากครับ

การมาของ systemd เปลี่ยนวิธีการทำงานของ Linux Admin ไปโดยสิ้นเชิงเพราะ systemd มาจัดการ service และ run level ในระบบปฏิบัติการ คุณหนีมันไม่พ้น ก็ต้องมาเรียนกันใหม่ อ้อ init script ที่เรียนกันมาก็เปลี่ยนใหม่ด้วย เอาล่ะการที่จะเข้าใจ systemd ได้เร็วคือการหัดใช้งานมันครับ เรามาลองจัดการ service บน systemd คำสั่งที่เราใช้งานคือ systemctl

ลองใช้คำสั่ง systemctl กันดูครับ

systemctl

เราจะพบว่า systemctl จะแสดงรายการทุกอย่างที่ systemd ควบคุมได้ ทั้ง service, timer, mount, target, automount เยอะมาก

เราจะมาเริ่มต้นกับสิ่งที่ง่ายๆ ก่อน เช่น การควบคุม service ต่างๆ มาเริ่มกันเลย ให้ติดตั้ง apache2 กันก่อน จะได้เห็นภาพได้ชัดเจนมากขึ้นครับ

yum install httpd

จากนั้นลองตรวจสอบดูว่า service httpd นี้สถานะเป็นอย่างไร ใช้คำสั่ง

systemctl status httpd

จะได้ผลลัพท์ดังนี้

เราจะพบว่า httpd service ไม่ได้ถูก enable และไม่ได้ทำงานอยู่ด้วย T_T ถ้าใช้ CentOS 6 ก็อาจจะเคยชินกับ chkconfig httpd on หรือ service httpd start อะไรอย่างนี้ แต่ถ้าควบคุมด้วย systemd ใช้คำสั่งดังนี้

ต้องการให้ service httpd ทำงานทุกครั้งหลังจาก boot เครื่อง ใช้คำสั่ง

systemctl enable httpd

ต้องการให้ service httpd เริ่มทำงาน ใช้คำสั่ง

systemctl start httpd

ลองใช้คำสั่งเพื่อดูสถานะของ service httpd อีกครั้งจะพบว่า httpd ทำงานแล้ว (Active: active) และทำงานทุกครั้งหลังจาก boot (Loaded = enable)

เหมือนชีวิตง่ายขึ้น (หรือเปล่า) ถ้าสังเกตเราจะพบว่า init script หรือ systemd จะเรียกว่า unit file จะอยู่ใน /usr/lib/systemd/system/httpd.service ลอง cat ดูก็จะพบว่า unit file เขียนได้ง่ายมากๆ แต่มี naming convention นิดหน่อยคือ ถ้าเป็น service ให้กำหนดเป็นนามสกุล .service ถ้าเป็น unix socket ก็กำหนดให้เป็น .socket เป็นต้น

systemd ควบคุมทุกอย่าง ดังนั้นการจะควบคุมอะไรนั้น จะต้องระบุด้วยว่าสิ่งที่ต้องการควบคุมเป็นอะไร เช่น service, target, socket เป็นต้น ยกตัวอย่าง httpd ไปแล้วโดยไม่ได้ระบุว่าเป็นอะไรนั้นก็เพราะโดย default จะเป็น service หากเราต้องการควบคุม socket บ้างจะทำอย่างไร ดูตัวอย่างจาก sshd ครับ เพราะสามารถเชื่อมต่อได้ทั้ง service และ socket ลองสั่ง systemctl status sshd.service และ systemctl status sshd.socket ดูก็จะพบว่า service sshd ทำงานอยู่ ส่วนการเชื่อมต่อแบบ socket นั้นปิดไว้ไม่ได้ใช้งาน

เล่นพอสนุกสนานคราวหน้ามาลองเขียน unit file กันครับ ;)

Comments are closed.