Trì hoãn việc chạy một systemd service

Có vài lý do khiến cần trì hoãn việc chạy một systemd service, như service cần một logical volume hay một thư mục cifs …

A. Thí dụ với redis-server

sudo systemctl status redis-server
● redis-server.service - Advanced key-value store
     Loaded: loaded (/lib/systemd/system/redis-server.service; disabled; vendor preset: enabled)
     Active: active (running) since Sat 2023-06-24 15:08:27 +07; 2h 56min ago
TriggeredBy: ● redis-server.timer
       Docs: http://redis.io/documentation,
             man:redis-server(1)
   Main PID: 603 (redis-server)
     Status: "Ready to accept connections"
      Tasks: 5 (limit: 8755)
        CPU: 34min 9.232s
     CGroup: /system.slice/redis-server.service
             └─603 /usr/bin/redis-server 127.0.0.1:6379

Jun 24 15:08:26 538-DLNA systemd[1]: Starting Advanced key-value store...
Jun 24 15:08:27 538-DLNA systemd[1]: Started Advanced key-value store.

1. Tạo một timer trigger để gọi chạy service 1 phút sau khi hệ thống khời động. Tên timer giống với tên service.

$ cat <<EOF | sudo tee /etc/systemd/system/redis-server.timer
[Unit]
Description=Timer for the redis-server service

[Timer]
OnBootSec=1min

[Install]
WantedBy=timers.target
EOF

2. Nạp lại cấu hình systemd

$ sudo systemctl daemon-reload

3. Disable service cũ

$ sudo systemctl disable redis-server

Removed /etc/systemd/system/multi-user.target.wants/redis-server.service.
Removed /etc/systemd/system/redis.service.

4. Enable service timer

$ sudo systemctl enable redis-server.timer

Created symlink /etc/systemd/system/timers.target.wants/redis-server.timer → /etc/systemd/system/redis-server.timer.

Timer sẽ gọi chạy service sau 1 phút

$ sudo systemctl status redis-server
● redis-server.service - Advanced key-value store
     Loaded: loaded (/lib/systemd/system/redis-server.service; disabled; vendor preset: enabled)
     Active: active (running) since Sat 2023-06-24 15:08:27 +07; 3h 5min ago
TriggeredBy: ● redis-server.timer
       Docs: http://redis.io/documentation,
             man:redis-server(1)
   Main PID: 603 (redis-server)
     Status: "Ready to accept connections"
      Tasks: 5 (limit: 8755)
        CPU: 36min 5.760s
     CGroup: /system.slice/redis-server.service
             └─603 /usr/bin/redis-server 127.0.0.1:6379

Jun 24 15:08:26 538-DLNA systemd[1]: Starting Advanced key-value store...
Jun 24 15:08:27 538-DLNA systemd[1]: Started Advanced key-value store.

B. Tương tự với nfs-kernel-server

cat <<EOF | sudo tee /etc/systemd/system/nfs-kernel-server.timer
[Unit]
Description=Timer for the nfs-kernel-server service

[Timer]
OnBootSec=30s

[Install]
WantedBy=timers.target
EOF

sudo systemctl daemon-reload

sudo systemctl disable nfs-kernel-server

sudo systemctl enable nfs-kernel-server.timer

Chú thích

  • Có thể chỉ định rõ tên service được gọi chạy bởi timer nếu tên timer khác với tên service.
...
[Timer]
OnBootSec=1min
Unit=redis-server.service
...
  • Xem danh sách timer bằng câu lệnh
 sudo systemctl list-timers

Comments Off on Trì hoãn việc chạy một systemd service

Filed under Software

Comments are closed.