Friday, November 1, 2024

Cách để tự động khởi động máy ảo trong Proxmox

-

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ệnh qm list và sử dụng awk để 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ệnh xargs lấy đầu ra của lệnh trước đó và truyền nó như một đối số cho lệnh qm 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)

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories