ถ้าใช้ Linux Distro สมัยใหม่ ต้องเจอข้อความ "A stop job is running" ตอน Shutdown แน่ๆ และมันหน่วง Shutdown ได้ถึง 90 วินาที ทำไมข้อความนี้ถึงขึ้น และลดได้อย่างไร
มันคือ Safety Feature ไม่ใช่ Bug
ข้อแรกที่ต้องรู้: ข้อความ "A stop job is running" เป็น Safety Feature ที่สร้างไว้ในระบบ ไม่ใช่ Bug
Distro สมัยใหม่อย่าง Ubuntu, Fedora, Arch ใช้ Systemd จัดการ Boot และ Shutdown ตอนกด Shutdown Systemd ไม่ได้ถอนปลั๊กทันที มันส่ง Signal สุภาพชื่อ SIGTERM ไปทุก Service และ App ที่รันอยู่ App ส่วนใหญ่รับ Signal นี้ แล้ว Save Data, ปิด Files, และ Shutdown อย่างสงบ
แต่บาง Services ต้องการเวลาเพิ่มทำ Task ให้เสร็จ และเพิกเฉย Signal นั้น นั่นคือตอนที่เห็น Warning Message Delay นี้มักเกิดจาก Services เหล่านี้: Network Managers, Containers, User Sessions, หรือ Network Mounted Drives ที่ต้องการเวลาเพิ่มปิด Connection หรือ Save Data อย่างปลอดภัย
User หลายคนหาวิธีแก้ตอนเห็น "A Stop Job is Running" คิดว่าอะไรเสีย จริงๆ Systemd Developers สร้างพฤติกรรมนี้ขึ้นมาเจตนา คือ Waiting Period ปกติ 90 วินาที ที่ Systemd ให้ Services ทำ Task ค้างให้เสร็จ ถ้า Service ไม่เสร็จภายใน Timeout ที่ตั้งไว้ Systemd จะ Force Terminate ด้วย SIGKILL และ Shutdown ต่อ
Graceful Shutdown นี้ ทำให้ Apps หลายตัว ทำสิ่งที่ค้างอยู่เสร็จ: ปิด Files, ทำ Database Transactions ให้เสร็จ, Unmount Filesystems อย่างสะอาด คุณลดเวลารอได้ แต่มันเพิ่มความเสี่ยง: สูญเสีย Writes/Transactions ล่าสุด, Corrupt Databases/Journal Files, หรือทิ้ง Mounted Drives ในสถานะไม่เสถียร
ลด Default Timeout
Default 90 วินาที สร้าง Balance สำหรับ User หลายคน โดยเฉพาะ Hardware เก่า เพราะพอสำหรับ Services ส่วนใหญ่ทำ Cleanup เสร็จ แต่สำหรับ User ที่ใช้ Laptop/Desktop สมัยใหม่ 90 วินาที อาจรู้สึกมากเกินไป
ไม่ว่าสาเหตุอะไร ปรับ Config File ได้: บอก systemd ให้ Services ที่ยังไม่เสร็จ มีเวลาจำนวนวินาทีที่กำหนด
เริ่มต้น: เปิด Terminal ใช้ Text Editor ที่ชอบ Edit System Config File:
sudo nano /etc/systemd/system.conf
หา Timeout Variable จะเห็นข้อความเยอะ คือ Global Settings หาบรรทัดคล้าย #DefaultTimeoutStopSec=90s Hash ตัวหน้าบรรทัด หมายถึง Commented Out/Disabled ระบบใช้ Internal Default ซึ่งคือ 90 วินาที
แก้ค่า: ลบ Hash ก่อนเพื่อ Activate บรรทัด แล้วเปลี่ยน 90 วินาที เป็นระยะสั้นกว่าตามชอบ
คำเตือน: ห้ามตั้งค่าเป็น 0 ตั้งเป็น 0 สร้าง Infinite Timeout ระบบจะรอตลอดกาล จน Process หยุด นั่นตรงข้ามกับที่เราอยากได้ ค่า Mid-range (20-30s) เป็น Compromise ใช้ได้จริงสำหรับหลายคน
เสร็จแล้ว Save และ Exit Editor เพื่อ Apply Changes ต้อง Reboot ปกติ เนื่องจากปัญหาเกิดตอน Shutdown อาจต้องทนรอนานอีกครั้งสุดท้าย หลัง Boot ถัดไป Limit ใหม่จะมีผล
หมายเหตุ: บางกรณีอาจต้อง Enable #DefaultDeviceTimeoutSec=90s ด้วย纔有效
เมื่อ Timeout อาจบ่งบอกปัญหา
ส่วนใหญ่ Stop Job Timeout เป็นพฤติกรรมปกติ แต่บางครั้งชี้ปัญหาลึก โดยเฉพาะถ้า Service เดียวกันหน่วง Shutdown ซ้ำๆ Network Mount อาจ Unreachable Daemon Config ผิด หรือ Service ไม่ตอบสนอง Shutdown Signals
ถ้าสังเกต Shutdown ใช้เวลานาทีแทนวินาที หรือ Service เดียว Timeout ทุกครั้ง คุ้มค่าที่จะสืบสวน Delay บางครั้งไม่เป็นไร แต่ถ้าสม่ำเสมอ แสดงว่ามีอย่างที่ต้องแก้
ระบุ Service ที่ทำหน่วง เช็ค Logs หลัง Reboot จาก Shutdown ช้า:
journalctl -b -1 -e
คำสั่งนี้แสดง Logs จาก Boot ก่อนหน้า และกระโดดไปท้าย Scroll ขึ้นหา Warnings, Timeout Messages, หรือ Services ที่ System Force Stop
เพิ่มเติม สcope ให้แคบลงด้วย Warning Level Messages:
journalctl -b -1 -p warning
อีกเช็คที่มีประโยชน์ รัน Systemd Analyze:
systemd-analyze blame
แม้คำสั่งนี้เน้น Startup Times Services ที่ Start ช้ามักพฤติกรรมคล้ายกันตอน Shutdown Services อื่นที่มัก Trigger Stop Job Messages:
- Network Services
- Remote Filesystems (NFS, SMB)
- Database Servers
- Container/VM Managers
- External Drives, Automount Units
Network-based Mounts น่าจะ Delay โดยเฉพาะถ้า Connection ไม่เสถียรหรือไม่พร้อมใช้งาน การลด Shutdown Timeout ทำให้ Shutdown รู้สึกเร็ว แต่ไม่แก้ Root Cause ถ้า Service ตัวไรหน่วง Shutdown สม่ำเสมอ แก้ Root Cause ให้ผลดีกว่า Long-term
สรุป
Linux ให้ Control ระดับสูง รวมถึงเวลารอ Services 頑固 Shutdown คุณยังจัดการ Background Apps และปิด Services ไม่จำเป็น ได้ เพื่อปรับปรุงทั้ง Shutdown และ Boot Times