Trong thực tế có một số máy ảo bạn luôn luôn phải đảm bảo rằng máy ảo “docker-swarm-1” luôn được duy trì hoạt động. Nếu có bất kỳ sự cố nào hoặc máy ảo bị dừng tạm thời, lệnh cron này sẽ tự động khởi động lại máy ảo mỗi 5 phút.
Điều này rất hữu ích trong trường hợp bạn muốn đảm bảo rằng dịch vụ hoặc ứng dụng trên máy ảo “docker-swarm-1” luôn hoạt động mà không cần can thiệp thủ công. Lệnh cron này giúp duy trì sự liên tục hoạt động của máy ảo, giảm thiểu sự gián đoạn và đảm bảo rằng máy ảo luôn sẵn sàng phục vụ công việc của bạn.
Giả sử mình có một danh sách máy ảo trong Proxmox như dưới.
$ qm list
VMID NAME STATUS MEM(MB) BOOTDISK(GB) PID
100 w-172.16.101.1 running 8192 100.00 7272
101 w-172.16.102.1 running 8192 100.00 7923
102 temp-win2k22 stopped 8192 100.00 0
103 w-172.16.103.1 stopped 8192 100.00 0
104 pfsense-192.168.13.189 stopped 8192 100.00 0
105 temp-opnsense stopped 8192 100.00 0
106 opnsense-192.168.13.189 stopped 8192 100.00 0
107 docker-swam-1 stopped 4096 100.00 326689
Ví dụ của mình là máy ảo có tên docker-swarm-1 đang ở trạng thái stop. Bạn có thể kết hợp các lệnh thành một dòng để sử dụng trong crontab để thực hiện điều này. Đây là dòng lệnh đó:
qm list | awk '$2=="docker-swarm-1" && $3=="stopped" {print $1}' | xargs -r qm start
Dòng lệnh này thực hiện như sau:
qm list | awk '$2=="docker-swarm-1" && $3=="stopped" {print $1}'
: Phần này chạy lệnhqm list
và sử dụngawk
để trích xuất ID của máy ảo dừng với tên “docker-swarm-1” từ kết quả.| xargs -r qm start
: Lệnhxargs
lấy đầu ra của lệnh trước đó và truyền nó như một đối số cho lệnhqm start
, lệnh này sẽ khởi động máy ảo nếu nó tồn tại.
Bạn có thể thêm dòng lệnh này vào crontab để kiểm tra định kỳ máy ảo dừng và khởi động nó nếu cần thiết. Ví dụ, để chạy 5 phút một lần và khởi động máy ảo khi reboot hệ thống, bạn có thể thêm dòng sau vào crontab (sử dụng crontab -e
để chỉnh sửa crontab) hoặc dùng vi vào trực tiếp /etc/crontab
:
*/5 * * * * qm list | awk '$2=="docker-swarm-1" && $3=="stopped" {print $1}' | xargs -r qm start
@reboot root qm list | awk '$2=="docker-swam-1" && $3=="stopped" {print $1}' | xargs -r qm start
Điều này sẽ thực hiện lệnh mỗi 5 phút một lần và sẽ tự động khởi động máy ảo này theo hệ thống.. Hãy điều chỉnh lịch trình theo nhu cầu của bạn.
Hãy khởi động lại cron.
systemctl restart cron.service
Hãy kiểm tra lại trạng thái của cron nhé.
$ systemctl status cron.service
● cron.service - Regular background program processing daemon
Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2023-08-05 22:51:28 +07; 9min ago
Docs: man:cron(8)
Main PID: 325860 (cron)
Tasks: 5 (limit: 309294)
Memory: 90.5M
CPU: 13.112s
CGroup: /system.slice/cron.service
├─269725 /usr/sbin/CRON -f
├─269726 /bin/sh -c /usr/local/emps/bin/php /usr/local/virtualizor/scripts/cronm.php >> /var/virtualizor/log/cronm 2>&1
├─269729 /usr/local/emps/bin/php /usr/local/virtualizor/scripts/cronm.php
├─283915 /usr/local/emps/bin/php /usr/local/virtualizor/scripts/billing.php
└─325860 /usr/sbin/cron -f
Aug 05 23:01:01 pve-node1 CRON[329830]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
Aug 05 23:01:01 pve-node1 CRON[329831]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
Aug 05 23:01:01 pve-node1 CRON[329832]: (root) CMD (/usr/local/emps/bin/php /usr/local/virtualizor/scripts/smart_device_cron.php >> /var/virtualizor/log/smar>
Aug 05 23:01:01 pve-node1 CRON[329833]: (root) CMD (qm list | awk '$2=="docker-swam-1" && $3=="stopped" {print $1}' | xargs -r qm start)
Aug 05 23:01:01 pve-node1 CRON[329834]: (root) CMD (/usr/local/emps/bin/php /usr/local/virtualizor/scripts/powercron.php >> /var/virtualizor/log/powercron 2>>
Aug 05 23:01:01 pve-node1 CRON[329835]: (root) CMD (/usr/local/emps/bin/php /usr/local/virtualizor/scripts/cronh.php >> /var/virtualizor/log/cronh 2>&1)