Gần như mọi bản phân phối Linux hiện đại đều dùng systemd để khởi động và quản lý dịch vụ. Nắm được systemctl và journalctl là đủ cho phần lớn công việc.
Năm lệnh dùng mỗi ngày
systemctl status nginx # trạng thái + vài dòng log gần nhất
systemctl start nginx # khởi động ngay
systemctl stop nginx # dừng
systemctl restart nginx # dừng rồi chạy lại
systemctl reload nginx # nạp lại cấu hình, KHÔNG ngắt kết nối
Ưu tiên reload hơn restart khi chỉ đổi cấu hình — người dùng không bị rớt kết nối.
Phân biệt enable và start
systemctl start nginx # chạy NGAY, nhưng reboot là mất
systemctl enable nginx # tự chạy khi khởi động, nhưng CHƯA chạy bây giờ
systemctl enable --now nginx # cả hai
Đây là nhầm lẫn kinh điển: dịch vụ chạy ngon lành, tới khi server reboot thì biến mất vì quên enable.
Xem toàn cảnh
systemctl list-units --type=service --state=running
systemctl list-unit-files --state=enabled
systemctl --failed # dịch vụ nào đang lỗi
Đọc log bằng journalctl
journalctl -u nginx -f # theo dõi trực tiếp
journalctl -u nginx --since "1 hour ago"
journalctl -u nginx -p err # chỉ mức lỗi trở lên
journalctl -b # log từ lần khởi động này
journalctl --disk-usage # log đang chiếm bao nhiêu
journalctl --vacuum-time=7d # chỉ giữ 7 ngày
Tự viết unit file
# /etc/systemd/system/myapp.service
[Unit]
Description=Ứng dụng nội bộ
After=network.target
[Service]
Type=simple
User=myapp
WorkingDirectory=/opt/myapp
EnvironmentFile=/opt/myapp/.env
ExecStart=/opt/myapp/.venv/bin/python app.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
systemctl daemon-reload # bắt buộc sau khi sửa unit file
systemctl enable --now myapp
journalctl -u myapp -f
Vài tùy chọn đáng thêm
Restart=always+RestartSec=5— tự dựng lại khi ứng dụng chết.User=— đừng chạy bằng root nếu không thật sự cần.EnvironmentFile=— để secret ngoài unit file, đặt quyền 600.TimeoutStopSec=30— cho ứng dụng thời gian đóng kết nối tử tế.
Nhớ một điều duy nhất: sửa unit file xong phải daemon-reload, nếu không systemd vẫn chạy bản cũ và bạn sẽ mất cả buổi tự hỏi vì sao.
