前言:KVM虚拟机系统是榨取服务器最大性能的一种好方法,但是谁也不想让服务器启动的时候要等待5分钟甚至以上的时间。 为了减轻服务器开机时的任务数量,需要虚拟机在开机后一段时间内,按顺序逐次启动,以达到各个服务间的依赖和功能衔接。

一、先上代码:kvm-vm.service

[Unit]
Description=Start KVM Guests
After=network-online.target

[Service]
Type=simple
ExecStart=/bin/bash -c 'while ! ping -c1 192.168.1.240 &>/dev/null; do sleep 1; done; for guest in NFS Mysql PHP Nginx; do virsh start $guest; sleep 1m; done'
Restart=always
RestartSec=5s

[Install]
WantedBy=multi-user.target

说明:

a.  ping -c1 192.168.1.240   ,这一句表示在ping出KVM主机的ip回应后,开始执行后继的命令;240是KVM主机的IP。

b.  NFS Mysql PHP Nginx   这是我的四个vm的名称,因为这几个服务又一定的依赖性,所以按顺序启动。NFS为其他三个服务提供存储功能;Mysql 为wordpress、nextcloud提供数据库功能;PHP服务器开了多个pool,最后被nginx反向代理.

c.  sleep 1m    表示间隔1分钟开启一个虚拟机。

特别说明: 这个service是一直保持运行的,如果进入虚拟机,运行poweroff,则1分钟以后,该虚拟机还会被启动起来。 下面的是进阶版,服务器启动5分钟后再开始运行 kvm-vm.service, 并且运行5分钟后,自己会关闭, systemctl status kvm-vm.service  的状态也是inactive的

 二、进阶版

[Unit]
Description=Start KVM Guests
After=network-online.target

[Service]
TimeoutStartSec=infinity
ExecStartPre=/bin/sleep 300

ExecStart=/bin/bash -c 'while ! ping -c1 192.168.1.240 &>/dev/null; do sleep 1; done; for guest in NFS Mysql PHP Nginx; do virsh start $guest; sleep 1m; done'

TimeoutStopSec=1 
KillSignal=SIGINT

[Install]
WantedBy=multi-user.target

以上内容设定了KVM系统开机后300秒后该服务的具体功能才开始执行,在任务完成后,再过1分钟,该服务自动关闭。

​​​​​​​

 三、rc.local 系统的顺序启动脚本

1. 当然,系统首先要又rc.local程序,或者本身就是rc.local管理的,例如Alpine Linux.

Alpine Linux的半自动安装和桌面、远程登录、frp、aria2服务等的配置_alpinelinux安装桌面_lggirls的博客-CSDN博客

2.  vim vms-start.sh

#!/bin/bash
# 一个控制KVM虚拟机在KVM宿主机启动后,按照1.5分钟启动一个的频率,顺序启动的脚本;
# 总计6个虚拟机,名称分别是: NFS,Rides,Mysql,Only,PHP,Nginx;
# 用虚拟机的名称设定一个数组,要按照启动顺序编写,空格隔开;
guests=(NFS Rides Mysql PHP Nginx)
# 轮询数组中的虚拟机名称,间隔1.5分钟启动一次;
for guest in "${guests[@]}";
do
# 使用virsh 命令启动虚拟机
virsh start "$guest"
# 检查退出状态,并输出一个消息
if [ $? -eq 0 ];
then
echo "Started $guest successfully."
else
echo "Failed to start $guest!"
fi
# 在开始新一个虚拟机的轮询前,等待90秒;
sleep 90
done
# 退出该脚本
exit 0

3. 加入rc.local 启动项

 update-rc.d kvm-start

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐