- 1 1. แนะนำเบื้องต้น
- 2 2. วิธีแสดงรายการบริการด้วย systemctl
- 3 3. วิธีจัดการบริการด้วย systemctl เบื้องต้น
- 4 4. systemctl: ตัวเลือกและเทคนิคที่ควรรู้
- 5 5. ปัญหาที่พบบ่อยและวิธีแก้ไข
- 6 6. สรุป
- 7 7. คำถามที่พบบ่อย (FAQ)
- 7.1 Q1. คำสั่ง systemctl กับ service ต่างกันอย่างไร?
- 7.2 Q2. list-units กับ list-unit-files ต่างกันอย่างไร?
- 7.3 Q3. บริการที่เป็น static สามารถ start ได้ไหม?
- 7.4 Q4. บริการที่ masked อยู่ start ไม่ได้ ต้องทำอย่างไร?
- 7.5 Q5. สามารถดูสถานะบริการแบบ GUI ได้ไหม?
- 7.6 Q6. ถ้าอยากสร้างไฟล์ยูนิตเอง ควรวางไว้ที่ไหน?
1. แนะนำเบื้องต้น
เมื่อใช้ Linux คุณอาจต้องการตรวจสอบสถานะของบริการหรือดูรายการโปรเซสที่กำลังทำงานอยู่บ่อยครั้ง ในสถานการณ์เหล่านี้ คำสั่ง systemctl
จะมีประโยชน์มาก
คำสั่งนี้รองรับ “systemd” ซึ่งเป็นระบบเริ่มต้นและตัวจัดการบริการใน Linux โดยสามารถใช้ตรวจสอบสถานะของบริการ (ยูนิต) สั่งเริ่ม หยุด รีสตาร์ท และแสดงรายการบริการได้หลากหลาย
โดยเฉพาะอย่างยิ่ง ถ้ามองในแง่ของ “การแสดงรายการบริการด้วย systemctl” จะสามารถดูทั้งบริการที่กำลังทำงาน บริการที่ถูกปิดใช้งาน หรือบริการที่ตั้งค่าให้เริ่มอัตโนมัติได้จากหลายมุมมอง
ในบทนี้จะสรุปความหมายของ systemctl อย่างกระชับ และอธิบายว่าในบทความนี้คุณจะได้เรียนรู้อะไรบ้าง
systemctl คืออะไร?
systemctl
คือเครื่องมือมาตรฐานในการควบคุมและตรวจสอบ “ยูนิต” ต่างๆ เช่น บริการ, ทาร์เก็ต, จุดเมาท์ ฯลฯ ใน Linux ที่ใช้ systemd
เช่น หากต้องการเริ่มหรือหยุดบริการอย่าง Apache (httpd) หรือ SSH และต้องการดูรายการสถานะของบริการเหล่านั้น systemctl จะเป็นคำสั่งหลักที่ใช้
ความสัมพันธ์ระหว่าง systemd กับ systemctl
systemd เป็นระบบหลักสำหรับการบูตและจัดการบริการใน Linux ซึ่งเข้ามาแทนที่ “SysVinit” หรือ “Upstart” ที่เคยใช้มาก่อน ส่วน systemctl
คือเครื่องมือบรรทัดคำสั่งสำหรับโต้ตอบกับ systemd
เปรียบเหมือน systemd คือ “ศูนย์ควบคุม” ในขณะที่ systemctl คือ “โอเปอเรเตอร์” ที่ส่งคำสั่ง
สิ่งที่คุณจะได้เรียนรู้จากบทความนี้
บทความนี้จะตอบคำถามเหล่านี้:
- จะดูรายการบริการที่กำลังทำงานอยู่ทั้งหมดได้อย่างไร?
- อยากแสดงบริการทั้งหมด รวมถึงบริการที่ไม่ได้ใช้งาน จะทำอย่างไร?
- อยากรู้ว่าบริการใดถูกตั้งค่าให้เริ่มอัตโนมัติบ้าง?
- จะอ่านผลลัพธ์จากการแสดงรายการบริการอย่างไร?
บทความนี้เหมาะกับมือใหม่ Linux ด้วย มีตัวอย่างคำสั่งและผลลัพธ์ให้ดูอย่างละเอียด โปรดติดตามจนจบ
2. วิธีแสดงรายการบริการด้วย systemctl
ในการบริหารระบบ Linux การดูรายการบริการอย่างรวดเร็วเป็นสิ่งสำคัญ systemctl
สามารถดูได้ทั้งบริการที่กำลังทำงานอยู่ บริการที่ไม่ได้ทำงาน และสถานะการตั้งค่าเริ่มต้นอัตโนมัติได้อย่างง่ายดาย
ส่วนนี้จะแนะนำ 3 วิธีหลักในการแสดงรายการบริการ:
- รายการบริการที่กำลังทำงาน (Active)
- รายการบริการทั้งหมด (รวมถึงที่ไม่ทำงาน)
- รายการไฟล์ยูนิตของบริการ (รวมสถานะการตั้งค่า)
2.1 แสดงรายการบริการที่กำลังทำงานอยู่ (Active Services)
หากต้องการดูเฉพาะบริการที่ “กำลังทำงานอยู่” บนระบบ ให้ใช้คำสั่งนี้
systemctl list-units --type=service
คำสั่งนี้จะแสดงบริการที่ Active ในขณะนั้น รายการที่ได้จะมีหัวข้อต่อไปนี้:
ชื่อหัวข้อ | คำอธิบาย |
---|---|
UNIT | ชื่อบริการ (เช่น ssh.service) |
LOAD | ไฟล์ยูนิตถูกโหลดหรือไม่ |
ACTIVE | สถานะบริการ (active, inactive, failed เป็นต้น) |
SUB | สถานะย่อย (running, exited, dead เป็นต้น) |
DESCRIPTION | คำอธิบายบริการ |
ข้อมูลนี้ช่วยให้คุณตรวจสอบได้ว่า nginx กำลังรันอยู่หรือไม่ หรือมีอะไรที่ทำงานอยู่บ้าง
2.2 แสดงบริการทั้งหมด รวมบริการที่ไม่ Active
โดยปกติ list-units
จะแสดงเฉพาะบริการที่ Active เท่านั้น ถ้าต้องการดูทั้งหมด ให้เพิ่มออปชัน --all
systemctl list-units --type=service --all
จะสามารถดูบริการที่ inactive หรือที่ไม่เคยถูกเรียกใช้งานมาก่อนได้ด้วย
หากต้องการกรองเฉพาะสถานะ ให้ใช้ --state=
ตามด้วยสถานะที่ต้องการ เช่น
systemctl list-units --type=service --state=inactive
เช่นนี้จะเห็นเฉพาะบริการที่หยุดอยู่
2.3 ดูรายการไฟล์ยูนิตของบริการ
ถ้าต้องการรู้ว่า บริการใดถูกตั้งค่าให้เริ่มอัตโนมัติหรือไม่ ใช้คำสั่งนี้
systemctl list-unit-files --type=service
จะแสดงรายชื่อไฟล์ยูนิตของบริการ (ไฟล์กำหนดค่า) พร้อมสถานะการ Enable/Disable
ค่าของ STATE | คำอธิบาย |
---|---|
enabled | จะถูกเริ่มอัตโนมัติเมื่อบูตเครื่อง |
disabled | จะไม่ถูกเริ่ม ต้องสั่งเอง |
static | ขึ้นกับยูนิตอื่น ไม่สามารถ enable/disable ตรงๆ ได้ |
masked | ถูกบล็อกไม่ให้เริ่มโดยเด็ดขาด (ป้องกันไว้) |
ข้อมูลนี้ช่วยให้เห็นภาพรวมว่า บริการใดจะเริ่มกับระบบ หรือมีอันไหนถูก masked โดยไม่ตั้งใจหรือไม่
3. วิธีจัดการบริการด้วย systemctl เบื้องต้น
คำสั่ง systemctl
นอกจากตรวจสอบสถานะแล้ว ยังใช้เริ่ม หยุด รีสตาร์ท และตั้งค่าการเริ่มอัตโนมัติของบริการได้ ส่วนนี้จะแนะนำวิธีใช้งานเบื้องต้นที่จำเป็นสำหรับผู้ดูแล Linux
การบริหารเซิร์ฟเวอร์หรือแก้ปัญหาต่างๆ จำเป็นต้องใช้คำสั่งเหล่านี้อย่างคล่องแคล่ว
3.1 สั่งเริ่มบริการ (Start Service)
หากต้องการสั่งเริ่มบริการ ให้ใช้ subcommand start
ดังนี้
sudo systemctl start ชื่อบริการ
ตัวอย่าง ถ้าจะเริ่ม Apache (httpd):
sudo systemctl start httpd.service
บริการจะถูกเริ่มทันที ถ้าต้องการให้คงอยู่หลังรีบูต ให้ใช้ enable
ร่วมด้วย (ดูด้านล่าง)
3.2 หยุดบริการ (Stop Service)
สั่งหยุดบริการ ใช้คำสั่งนี้
sudo systemctl stop ชื่อบริการ
ตัวอย่าง:
sudo systemctl stop sshd.service
บริการจะหยุดทำงานจนกว่าจะสั่ง start
ใหม่
3.3 รีสตาร์ทบริการ (Restart Service)
หากต้องการรีสตาร์ทบริการ (เช่น หลังแก้ไขค่า config) ใช้คำสั่งนี้
sudo systemctl restart ชื่อบริการ
ตัวอย่าง:
sudo systemctl restart nginx.service
บริการจะหยุดแล้วเริ่มใหม่ทันที
3.4 ตรวจสอบสถานะของบริการ
ต้องการตรวจสอบสถานะโดยละเอียด ใช้ subcommand status
systemctl status ชื่อบริการ
ตัวอย่าง:
systemctl status mysql.service
จะแสดงสถานะ ปัจจุบัน, PID, และสรุป log ที่เกี่ยวข้อง เหมาะสำหรับการแก้ไขปัญหา
3.5 ตั้งค่าบริการให้เริ่มอัตโนมัติ (Enable Service)
หากต้องการให้บริการเริ่มอัตโนมัติเมื่อรีบูต ใช้ subcommand enable
sudo systemctl enable ชื่อบริการ
ตัวอย่าง:
sudo systemctl enable docker.service
ระบบจะเริ่มบริการนี้โดยอัตโนมัติในครั้งถัดไป
3.6 ปิดการเริ่มอัตโนมัติ (Disable Service)
หากไม่ต้องการให้บริการเริ่มอัตโนมัติ ให้ใช้ disable
sudo systemctl disable ชื่อบริการ
ตัวอย่าง:
sudo systemctl disable cups.service
บริการนี้จะไม่เริ่มกับการบูตเครื่องอีกต่อไป
3.7 ตรวจสอบสถานะการตั้งค่า Enable/Disable
ตรวจสอบบริการปัจจุบันว่าถูก enable หรือ disable ด้วย is-enabled
systemctl is-enabled ชื่อบริการ
ตัวอย่างผลลัพธ์:
enabled
ผลลัพธ์นี้จะบอกให้รู้ว่านโยบายการเริ่มต้นของบริการนั้นเป็นอย่างไร
4. systemctl: ตัวเลือกและเทคนิคที่ควรรู้
systemctl ไม่ได้มีแค่คำสั่งพื้นฐานเท่านั้น ยังรองรับการบริหารขั้นสูง เช่น การแสดง dependency และ option อื่นๆ ที่อำนวยความสะดวกมากขึ้น
การนำเทคนิคเหล่านี้ไปใช้ จะช่วยให้บริหาร Linux ได้มีประสิทธิภาพยิ่งขึ้น
4.1 แสดง Dependency ของบริการ
ใน Linux บริการหนึ่งอาจขึ้นกับยูนิตหรือบริการอื่น ๆ ต้องการดูความสัมพันธ์ ให้ใช้ list-dependencies
systemctl list-dependencies ชื่อบริการ
ตัวอย่าง:
systemctl list-dependencies nginx.service
คำสั่งนี้จะแสดงยูนิตที่เกี่ยวข้องเป็นลำดับชั้น เหมาะกับการวิเคราะห์ลำดับการเริ่มบริการ
4.2 แสดงเนื้อหาไฟล์ยูนิต
ถ้าต้องการดูค่ากำหนดละเอียดในไฟล์ยูนิต (ไฟล์ .service) ใช้คำสั่งนี้
systemctl cat ชื่อบริการ
ตัวอย่าง:
systemctl cat ssh.service
จะแสดง path และเนื้อหาของยูนิตที่โหลดใช้งานอยู่

4.3 โหลดยูนิตไฟล์ใหม่
หากแก้ไขยูนิตไฟล์ ต้องสั่ง daemon-reload
เพื่อให้ systemctl โหลดค่าใหม่
sudo systemctl daemon-reexec
หรือโดยทั่วไปนิยมใช้:
sudo systemctl daemon-reload
หลังจากนั้น systemd จะใช้ค่าที่แก้ไขใหม่ หากรู้สึกว่าแก้แล้วไม่เปลี่ยนแปลง ให้ลองสั่ง reload นี้ก่อน
4.4 ดู log ของยูนิต (เพิ่มเติม)
แม้ systemctl เองจะไม่แสดง log ทั้งหมด แต่สามารถใช้ journalctl
เพื่อดู log ของบริการได้
journalctl -u ชื่อบริการ
ตัวอย่าง:
journalctl -u docker.service
จะเห็น log error การเริ่มต้นหรือรีสตาร์ท ช่วยในการแก้ไขปัญหา
5. ปัญหาที่พบบ่อยและวิธีแก้ไข
การบริหารบริการด้วย systemctl
อาจเจอปัญหาหรือ error ได้ ส่วนนี้จะอธิบายปัญหาที่พบบ่อยและแนวทางแก้ไข
เช่น “บริการไม่เริ่ม” หรือ “ไม่รู้สาเหตุที่หยุดทำงาน” ให้ดูหัวข้อนี้ก่อน จะช่วยให้แก้ปัญหาได้รวดเร็ว
5.1 กรณีบริการไม่เริ่ม ต้องตรวจสอบอะไรบ้าง?
พยายามเริ่มบริการแต่เจอ error เช่น
Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details.
ควรตรวจสอบตามลำดับนี้:
- ดู status ของบริการ
systemctl status ชื่อบริการ
- ตรวจสอบ error log
journalctl -xe
- รีโหลดยูนิตไฟล์
ถ้าเพิ่งแก้ไฟล์ยูนิต ให้สั่ง reload
sudo systemctl daemon-reload
- เช็คการชนกันของพอร์ต
ตรวจสอบว่ามีพอร์ตเดียวกันถูกใช้โดยโปรเซสอื่นหรือไม่
sudo netstat -tulnp | grep หมายเลขพอร์ต
5.2 วิธีอ่าน error message จากคำสั่ง status
เมื่อใช้ systemctl status
จะแสดงทั้งสถานะและ log ล่าสุด เช่น
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
Active: failed (Result: exit-code) since Fri 2025-04-18 12:00:00 JST; 5s ago
Process: 12345 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=1/FAILURE)
จะเห็น “Active: failed” หรือ “status=1/FAILURE” ช่วยระบุสาเหตุเบื้องต้นของปัญหา
จากบรรทัด Loaded จะเห็น path ของยูนิตไฟล์ด้วย ทำให้ง่ายต่อการตรวจสอบ
5.3 บริการหยุดเองโดยอัตโนมัติ
ถ้าบริการเริ่มแต่หยุดเอง สาเหตุหลักๆ ได้แก่:
- ไฟล์ config มีข้อผิดพลาด
- พอร์ตชนกับบริการอื่น
- ไม่มีไฟล์หรือไดเรกทอรีที่จำเป็น
- ขาดสิทธิ์ในการรัน
แนวทางแก้ไขเช่น:
- ตรวจสอบ config ด้วย
nginx -t
หรือapachectl configtest
- ดู log รายละเอียดด้วย
journalctl -u ชื่อบริการ
- ตรวจสอบว่ามีไดเรกทอรี (เช่น
/var/run/xxx
) ที่ต้องใช้หรือไม่ ถ้าไม่มีให้สร้าง
5.4 ไม่สามารถ start บริการที่อยู่ในสถานะ masked
หากสั่ง systemctl start
แล้วขึ้น error ว่า:
Failed to start example.service: Unit example.service is masked.
แปลว่าบริการนั้นถูก mask (ปิดแบบสมบูรณ์) ต้องใช้ unmask
ปลดล็อกก่อน
sudo systemctl unmask ชื่อบริการ
แล้วจึงสั่ง start ได้ตามปกติ
6. สรุป
การจัดการบริการใน Linux เป็นงานสำคัญประจำวัน โดยใช้คำสั่ง systemctl
เป็นเครื่องมือหลักในการแสดงรายการและควบคุมบริการต่างๆ
บทความนี้เน้น “systemctl แสดงรายการ” โดยอธิบายจุดสำคัญต่าง ๆ ดังนี้
สรุปสิ่งที่ systemctl ทำได้
- ตรวจสอบรายการบริการ
- แสดงบริการที่กำลังรัน (
list-units --type=service
) - ดูทั้งหมด (รวม inactive) (
--all
หรือ--state=
option) - ดูไฟล์ยูนิตและสถานะการ Enable/Disable (
list-unit-files
) - ควบคุมบริการพื้นฐาน
- เริ่ม/หยุด/รีสตาร์ท/เช็คสถานะ (start/stop/restart/status)
- ตั้งค่าเริ่มอัตโนมัติ (enable/disable/is-enabled)
- ขั้นสูงและแก้ปัญหา
- ดู dependency, ดูยูนิตไฟล์, reload การตั้งค่า
- วิเคราะห์ error จาก log และสถานะ
Best Practice ในการจัดการบริการ
- ตรวจสอบสถานะก่อนสั่งงาน (เช็ค
status
เสมอ) - ตรวจสอบการ enable/disable (ด้วย
is-enabled
) - สั่ง
daemon-reload
หลังแก้ไขค่าต่างๆ - เช็ค log ด้วย
journalctl
เมื่อมีปัญหา
การตรวจสอบเป็นประจำเหล่านี้จะช่วยให้บริการมีเสถียรภาพและแก้ปัญหาได้รวดเร็ว
หัวข้อแนะนำสำหรับศึกษาต่อ
ถ้าอยากศึกษาต่อ แนะนำหัวข้อต่อไปนี้:
- systemd target (ต่างจาก runlevel อย่างไร)
- การตั้ง schedule อัตโนมัติด้วย
systemd-timer
- การสร้างและจัดวางยูนิตไฟล์เอง
7. คำถามที่พบบ่อย (FAQ)
รวบรวมคำถามยอดนิยมเกี่ยวกับ systemctl
และการแสดงรายการบริการ เหมาะทั้งมือใหม่และผู้ที่ต้องการทบทวน
Q1. คำสั่ง systemctl
กับ service
ต่างกันอย่างไร?
A1.systemctl
เป็นคำสั่งสำหรับจัดการบริการบนระบบที่ใช้ systemd ซึ่งเป็นมาตรฐานบน Linux รุ่นใหม่ ๆ (Ubuntu, CentOS, Fedora ฯลฯ) ส่วน service
เป็นของระบบเก่า (SysVinit) ปัจจุบัน systemd แนะนำให้ใช้ systemctl
เป็นหลัก
Q2. list-units
กับ list-unit-files
ต่างกันอย่างไร?
A2.
list-units
แสดงยูนิตที่ถูกโหลด (บริการที่กำลังรันหรือเคยถูกเรียกใช้งาน)list-unit-files
แสดงไฟล์ยูนิตทั้งหมดและสถานะ enable/disable
สรุปคือ ต่างกันที่ “สิ่งที่กำลังทำงาน” กับ “สิ่งที่ตั้งค่าไว้”
Q3. บริการที่เป็น static สามารถ start ได้ไหม?
A3.
บริการ static
สามารถ start ได้เอง แต่ไม่สามารถ enable ให้ start อัตโนมัติได้
เนื่องจาก static ขึ้นกับยูนิตอื่นจะเป็นผู้เรียกใช้งาน
Q4. บริการที่ masked อยู่ start ไม่ได้ ต้องทำอย่างไร?
A4.masked
คือบริการที่ถูกบล็อกการเริ่มต้นอย่างสมบูรณ์ ต้องสั่ง unmask ก่อน:
sudo systemctl unmask ชื่อบริการ
จากนั้นจึง start ได้ตามปกติ
Q5. สามารถดูสถานะบริการแบบ GUI ได้ไหม?
A5.
บาง Linux เช่น Ubuntu มีเครื่องมืออย่าง gnome-system-monitor
, KSysGuard
, Cockpit
ให้ดูสถานะบริการแบบกราฟิก
แต่ถ้าต้องการจัดการหรือปรับแต่งอย่างละเอียด แนะนำใช้ systemctl
จะดีที่สุด
Q6. ถ้าอยากสร้างไฟล์ยูนิตเอง ควรวางไว้ที่ไหน?
A6.
โดยทั่วไปให้วางไฟล์ยูนิตไว้ที่ /etc/systemd/system/
หลังจากแก้ไขแล้วต้องสั่ง:
sudo systemctl daemon-reload
จากนั้นสามารถ start/enable ได้ตามปกติ