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