Systemd Service Management บน Linux VPS — คู่มือครบจบ

Systemd คือระบบ Init มาตรฐานบน Linux สมัยใหม่ ทำหน้าที่จัดการบูต Process เริ่มต้น Service และดูแลการทำงานของระบบ การเข้าใจ Systemd อย่างถ่องแท้ช่วยให้คุณจัดการ VPS ได้ดีขึ้น ตั้งค่า Service ให้เริ่มต้นอัตโนมัติ และสร้าง Custom Service สำหรับ Application ของคุณเอง

คำสั่ง systemctl พื้นฐาน

# ดูสถานะของ Service
sudo systemctl status nginx
sudo systemctl status mysql
sudo systemctl status ssh

# เริ่ม/หยุด/รีสตาร์ต Service
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx

# Reload โดยไม่ตัด Connection (ถ้ารองรับ)
sudo systemctl reload nginx

# เปิด/ปิด Auto-start เมื่อ Boot
sudo systemctl enable nginx
sudo systemctl disable nginx

ดูรายละเอียด Service และ Log

# ดูรายละเอียด Service
systemctl cat nginx

# ดู Log ของ Service
journalctl -u nginx
journalctl -u nginx --since "1 hour ago"
journalctl -u nginx -f    # Real-time
journalctl -u nginx -n 50 # ดู 50 บรรทัดล่าสุด

# ดู Log ทั้งหมด (ตั้งแต่ Boot)
journalctl -b

# ดู Boot งานและช้าเกิน 10 วินาที
systemctl blame | head -20

ดูโครงสร้าง Service

# ดูทุก Service ที่ Enable
systemctl list-units --type=service

# ดูเฉพาะ Service ที่กำลัง Active
systemctl list-units --type=service --state=active

# ดู Service ที่ Failed
systemctl list-units --state=failed

# ดูการที่ Service นั้นเริ่มต้นก่อน-หลัง
systemctl show nginx --property=After
systemctl show nginx --property=Before

สร้าง Custom Systemd Service

ถ้าคุณมี Application เช่น Node.js, Python, Golang ที่ต้องการให้รันตลอดเวลาและเริ่มใหม่อัตโนมัติเมื่อ Crash สร้าง Unit File ของตัวเอง:

sudo nano /etc/systemd/system/myapp.service
[Unit]
Description=My Node.js Application
After=network.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/var/www/myapp
ExecStart=/usr/bin/node /var/www/myapp/app.js
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal

# ตั้ง Environment Variables
Environment=NODE_ENV=production
Environment=PORT=3000

[Install]
WantedBy=multi-user.target
# Reload Systemd หลังเพิ่ม Unit File
sudo systemctl daemon-reload

# เปิด Service
sudo systemctl enable myapp
sudo systemctl start myapp
sudo systemctl status myapp

ตัวเลือกใน [Service] Block

Option ค่า คำอธิบาย
Type simple / forking / notify รูปแบบของ Process
Restart always / on-failure / no เมื่อไหร่ต้อง Restart
RestartSec 5–10 รอกี่วินาทีก่อน Restart
User ubuntu / www-data User ที่รัน Process
WorkingDirectory /var/www/myapp โฟลเดอร์เริ่มต้น
Environment KEY=VALUE ตั้ง Env Variable

จัดการ Journal Log

# ดู Disk ที่ Journal ใช้
sudo journalctl --disk-usage

# ลบ Log เก่ากว่า 7 วัน
sudo journalctl --vacuum-time=7d

# จำกัดขนาด Log ไว้ 100MB
sudo journalctl --vacuum-size=100M

# ตั้งค่าถาวรใน /etc/systemd/journald.conf
# SystemMaxUse=100M
# MaxRetentionSec=7day

คำสั่ง systemctl ที่ถูกใช้บ่อยที่สุด

# ดูทุก Service ที่ Active
systemctl list-units --type=service --state=active

# ตรวจ Service ที่ Fail
systemctl --failed

# Mask Service (ป้องกันไม่ให้เริ่มได้เลย)
sudo systemctl mask snap.lxd.daemon

# Unmask Service
sudo systemctl unmask snap.lxd.daemon

# Reload systemd Config (Daemon Reload)
sudo systemctl daemon-reload

# ดูคุณสมบัติและค่าทั้งหมดของ Service
systemctl show nginx

สรุป

Systemd เป็นหัวใจสำคัญของการจัดการ Linux VPS จริง การเข้าใจการใช้งาน systemctl สำหรับการ Enable, Disable, Start, Stop, Restart และดู Log ด้วย journalctl เป็นทักษะพื้นฐานที่ SysAdmin ทุกคนต้องมี การสร้าง Custom Service Unit ทำให้คุณควบคุมการทำงานของ Application ได้อย่างมีประสิทธิภาพผ่านระบบที่เชื่อถือได้

Cloud VPS จาก Dot Enterprise รัน Ubuntu ที่ใช้ Systemd เป็นระบบ Init เต็มรูป จึงนำคำสั่งเหล่านี้ไปใช้งานได้ทันที