คำตอบสั้น ๆ: ใช้ systemctl สั่ง Start, Stop, Restart และ Reload Service ตั้งให้เปิดอัตโนมัติตอนบูต ดูสถานะเมื่อ Service ล้ม และสร้าง Unit File สำหรับแอปของคุณเอง
คู่มือนี้อธิบาย systemctl ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
Linux รุ่นปัจจุบันทั้ง Ubuntu และ AlmaLinux/Rocky ใช้ systemd เป็นตัวจัดการ Service ไม่ว่าจะเป็น Nginx, Apache, MySQL, PHP-FPM หรือ SSH ล้วนเป็น Unit ที่ควบคุมผ่านคำสั่ง systemctl ทั้งสิ้น บทความนี้สอนคำสั่งที่ใช้บ่อย วิธีอ่านสถานะ และวิธีสร้าง Service สำหรับแอปของคุณเองให้เปิดอัตโนมัติเมื่อเครื่องรีบูต
สิ่งที่ต้องเตรียม
- เซิร์ฟเวอร์ Ubuntu 22.04/24.04 หรือ AlmaLinux/Rocky Linux 8-9
- ผู้ใช้ที่มีสิทธิ์ sudo (การดูสถานะไม่ต้องใช้ sudo แต่การสั่งเปลี่ยนสถานะต้องใช้)
- ชื่อ Service ที่ถูกต้อง ซึ่งบางตัวต่างกันตาม Distribution ตามตารางด้านล่าง
| โปรแกรม | Ubuntu | AlmaLinux / Rocky |
|---|---|---|
| Apache | apache2 | httpd |
| SSH | ssh | sshd |
| PHP-FPM | php8.3-fpm (ตามเวอร์ชัน) | php-fpm |
| MariaDB / MySQL | mariadb หรือ mysql | mariadb หรือ mysqld |
| Cron | cron | crond |
ถ้าไม่แน่ใจชื่อ ให้ค้นด้วย systemctl list-unit-files | grep -i php
ขั้นตอนที่ 1: ดูสถานะ Service
systemctl status nginx
ผลลัพธ์ที่ปกติจะมีลักษณะดังนี้
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running) since Fri 2026-09-18 09:15:02 +07; 1 day ago
Main PID: 812 (nginx)
ให้ดู 2 บรรทัดหลัก บรรทัด Loaded บอกตำแหน่ง Unit File และคำว่า enabled หมายถึงเปิดอัตโนมัติตอนบูต บรรทัด Active บอกสถานะปัจจุบัน ได้แก่ active (running) กำลังทำงาน inactive (dead) หยุดอยู่ และ failed ล้มเหลว ด้านล่างสุดจะมี Log ล่าสุดของ Service นั้นประมาณ 10 บรรทัด กด q เพื่อออก
สำหรับใช้ในสคริปต์ มีคำสั่งที่ให้ผลสั้นกว่า
systemctl is-active nginx
systemctl is-enabled nginx
ขั้นตอนที่ 2: Start, Stop, Restart และ Reload
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx
| คำสั่ง | ผล | ใช้เมื่อ |
|---|---|---|
restart | หยุดแล้วเริ่มใหม่ การเชื่อมต่อที่ค้างอยู่จะถูกตัด | อัปเดตโปรแกรม หรือ Service ค้าง |
reload | อ่าน Config ใหม่โดยไม่หยุด Process หลัก | แก้ Config ของ Nginx, Apache, PHP-FPM |
reload-or-restart | reload ถ้า Service รองรับ ไม่เช่นนั้น restart | ใช้ในสคริปต์ที่ไม่แน่ใจว่ารองรับ reload |
ก่อน reload หรือ restart Web Server ควรทดสอบ Config ก่อนเสมอ ถ้า Config ผิด Service จะไม่ขึ้นมาและเว็บล่ม
sudo nginx -t
sudo apachectl configtest
sudo systemctl reload nginx
ผลที่ถูกต้องของ nginx -t คือ syntax is ok และ test is successful ส่วน Apache จะแสดง Syntax OK
หมายเหตุ: การ restart Service SSH หลังแก้ Config ไม่ตัด Session ที่เปิดอยู่ แต่ถ้า Config ผิดจะเข้าใหม่ไม่ได้ ให้ทดสอบด้วย
sudo sshd -tก่อน restart และเปิดหน้าต่าง SSH ที่สองเพื่อทดสอบเข้าก่อนปิดหน้าต่างเดิม บน Ubuntu 24.04 SSH ทำงานผ่านssh.socketจึงมีขั้นตอนเพิ่ม ดู วิธีเปลี่ยน SSH Port บน Linux Server
ขั้นตอนที่ 3: ตั้งให้เปิดอัตโนมัติตอนบูต
sudo systemctl enable nginx
sudo systemctl enable --now redis-server
sudo systemctl disable apache2
sudo systemctl disable --now apache2
enable ตั้งให้เปิดตอนบูตเท่านั้น ไม่ได้เริ่ม Service ทันที ถ้าต้องการทั้งสองอย่างให้ใส่ --now เช่นเดียวกับ disable --now ที่ทั้งหยุดทันทีและไม่ให้เปิดตอนบูต
ถ้าต้องการกันไม่ให้ Service ถูกเปิดโดยเด็ดขาด แม้โปรแกรมอื่นจะเรียกใช้ ให้ใช้ mask และยกเลิกด้วย unmask
sudo systemctl mask apache2
sudo systemctl unmask apache2
ตัวอย่างที่ใช้จริงคือเครื่องที่ติดตั้งทั้ง Apache และ Nginx ซึ่งแย่งพอร์ต 80 กัน การ mask ตัวที่ไม่ใช้ช่วยกันไม่ให้มันขึ้นมาหลังอัปเดตแพ็กเกจ
ขั้นตอนที่ 4: หา Service ที่ล้ม
systemctl --failed
systemctl list-units --type=service --state=running
systemctl list-unit-files --type=service --state=enabled
systemctl --failed เป็นคำสั่งแรกที่ควรรันเมื่อสงสัยว่ามีบางอย่างไม่ทำงานหลังรีบูต ถ้าพบ Service ที่ failed ให้ดู Log เต็มด้วย
sudo journalctl -u nginx -n 50 --no-pager
วิธีกรองและอ่าน Log อย่างละเอียดอยู่ใน อ่าน Log ระบบบน Linux ด้วย journalctl หลังแก้สาเหตุแล้ว ให้ล้างสถานะ failed ด้วย sudo systemctl reset-failed nginx แล้ว start ใหม่