Nếu bạn dùng distro Linux hiện đại, chắc chắn sẽ gặp thông báo A stop job is running khi tắt máy, và nó sẽ dừng quá trình tắt máy lên đến 90 giây. Hãy tìm hiểu tại sao thông báo này xuất hiện và cách giảm thiểu nó.
Đây là tính năng an toàn, không phải bug
Điều đầu tiên bạn cần biết là thông báo A stop job is running là tính năng an toàn tích hợp trong hệ thống, không phải bug.
Các distro Linux hiện đại như Ubuntu, Fedora, Arch dùng Systemd quản lý quá trình boot và shutdown. Khi bạn nhấn Shut Down, Systemd không chỉ ngắt nguồn. Nó gửi tín hiệu lịch sự gọi là SIGTERM đến mọi dịch vụ và ứng dụng đang chạy. Hầu hết ứng dụng, sau khi nhận tín hiệu này, lưu dữ liệu, đóng file, và tắt máy một cách graceful.
Tuy nhiên, một số dịch vụ cần thêm thời gian để hoàn thành tác vụ và bỏ qua tín hiệu. Đó là lúc bạn thấy thông báo cảnh báo. Độ trễ này thường xảy ra vì một số dịch vụ như network manager, container, user session, hoặc ổ đĩa mount qua mạng cần thêm thời gian để đóng kết nối hoặc lưu dữ liệu an toàn.
Nhiều người dùng Linux tìm cách sửa khi thấy thông báo A Stop Job is Running, cho rằng có gì đó hỏng. Thực tế, các nhà phát triển Systemd xây dựng hành vi này có chủ đích. Cơ bản, đó là khoảng chờ, thường 90 giây, mà Systemd cho dịch vụ hoàn thành tác vụ đang chờ. Nếu dịch vụ không xong trong timeout cấu hình, Systemd buộc chấm dứt nó bằng SIGKILL và tiếp tục tắt máy.
Với shutdown graceful này, nhiều ứng dụng hoàn thành việc đang làm, như đóng file, hoàn tất transaction database, và unmount filesystem sạch sẽ. Bạn vẫn có thể bỏ qua thời gian chờ và làm shutdown nhanh hơn, nhưng làm vậy cũng tăng rủi ro mất ghi gần đây hoặc transaction, hỏng database hoặc file journal, hoặc để ổ mount trong trạng thái không ổn định.
Giảm timeout mặc định
Timeout 90 giây mặc định cân bằng cho nhiều người dùng Linux, đặc biệt dùng phần cứng cũ, vì nó đủ dài cho hầu hết dịch vụ dọn dẹp xong. Tuy nhiên, đối với người dùng laptop hoặc desktop hiện đại, 90 giây có thể cảm thấy quá lâu.
Dù lý do gì, bạn có thể chỉnh file cấu hình hệ thống và giảm timeout bằng cách nói với systemd cho dịch vụ chưa xong một số giây cụ thể để hoàn thành.
Để bắt đầu, mở terminal và dùng trình soạn thảo ưa thích để sửa file cấu hình hệ thống:
sudo nano /etc/systemd/system.conf
Tiếp theo, tìm biến timeout. Bạn sẽ thấy nhiều văn bản, đại diện cho cài đặt toàn cục hệ thống. Tìm dòng giống #DefaultTimeoutStopSec=90s. Dấu thăng đầu dòng nghĩa là dòng đó bị comment hoặc disable. Hệ thống đang dùng giá trị mặc định nội bộ, xảy ra là 90 giây.
Để sửa giá trị, trước hết bỏ dấu thăng để kích hoạt dòng, sau đó đổi 90 giây thành khoảng thời gian ngắn hơn theo ý thích.
Cảnh báo: Đừng đặt giá trị này thành 0. Đặt 0 tạo timeout vô hạn, nghĩa là hệ thống sẽ chờ mãi mãi tiến trình dừng. Đó là điều ngược lại với mong muốn. Giá trị trung gian (20-30s) là sự thỏa hiệp thực tế cho nhiều người dùng.
Khi xong, lưu và thoát trình soạn thảo. Để áp dụng thay đổi, thường cần reboot. Vì vấn đề xảy ra khi shutdown, bạn có thể thấy chờ dài lần cuối này. Sau boot tiếp theo, giới hạn giây mới sẽ có hiệu lực.
Lưu ý: Trong một số trường hợp, bạn có thể cần kích hoạt #DefaultDeviceTimeoutSec=90s cũng để nó hoạt động.
Khi timeout có thể chỉ ra vấn đề
Trong hầu hết trường hợp, timeout stop job là hành vi bình thường. Tuy nhiên, nó đôi khi chỉ ra vấn đề ngầm, đặc biệt nếu cùng một dịch vụ làm chậm shutdown lặp đi lặp lại. Một network mount có thể trở nên không thể truy cập, daemon có thể bị cấu hình sai, hoặc dịch vụ có thể không phản hồi đúng tín hiệu shutdown.
Nếu bạn nhận thấy shutdown mất phút thay vì giây, hoặc cùng dịch vụ timeout mỗi lần, đáng để điều tra. Độ trễoccasion thường vô hại, nhưng những cái nhất quán cho thấy có thứ gì đó cần chú ý.
Để xác định dịch vụ gây chậm, kiểm tra log sau reboot từ shutdown chậm:
journalctl -b -1 -e
Lệnh này hiển thị log từ boot trước và nhảy đến cuối. Bạn cuộn lên tìm cảnh báo, thông báo timeout, hoặc dịch vụ hệ thống buộc dừng.
Ngoài ra, bạn cũng thu hẹp bằng cách xem message mức warning:
journalctl -b -1 -p warning
Kiểm tra hữu ích khác là chạy lệnh Systemd analyze:
systemd-analyze blame
Mặc dù lệnh này tập trung vào thời gian khởi động, dịch vụ chậm khởi động thường hành xử tương tự khi shutdown. Một số dịch vụ thường gây thông báo stop job bao gồm:
- Dịch vụ mạng
- Filesystem từ xa như NFS hoặc SMB
- Database server
- Container và virtual machine manager
- Ổ đĩa ngoài, và unit automount
Mount dựa trên mạng đặc biệt dễ bị chậm nếu kết nối không ổn định hoặc không còn khả dụng. Cũng, giảm timeout shutdown có thể làm shutdown cảm thấy nhanh hơn, nhưng nó không sửa vấn đề gốc. Nếu dịch vụ liên tục làm chậm shutdown, giải quyết nguyên nhân gốc mang lại kết quả tốt hơn lâu dài.
Tóm lại
Linux trao cho bạn mức kiểm soát cao đối với hệ thống, bao gồm cả thời gian chờ dịch vụ cứng đầu tắt máy. Bạn cũng có thể quản lý ứng dụng nền và vô hiệu hóa dịch vụ không cần thiết để cải thiện cả thời gian shutdown và boot.