KVM虚拟机的定时逐次开机设定方法-systemd方式

news/2025/2/15 23:37:47/

前言: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 300ExecStart=/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


http://www.ppmy.cn/news/56552.html

相关文章

spring security regexrequestmatcher 认证绕过漏洞(CVE-2022-22978)

漏洞详情 CVE-2022-22978 中&#xff0c;在Spring Security受影响版本范围内&#xff0c;若使用了存在特殊配置&#xff08;含 .&#xff09;的RegexRequestMatcher 的情况下可能导致权限绕过。 受影响版本&#xff1a; 5.5.0 < Spring Security < 5.5.7 5.6.0 < …

辨析 可交付成果、核实的可交付成果、验收的可交付成果、最终成果

可交付成果、核实的可交付成果、验收的可交付成果、最终成果 辨析 可交付成果 指的是在某一过程、阶段或项目完成时&#xff0c;产出的任何独特并可核实的产品、成果或服务。可交付成果可能是有形的&#xff0c;也可能是无形的。 指导与管理项目工作产生可交付成果 核实的可…

CSDN周赛第48期

不知不觉又过去两期周赛&#xff0c;相应地&#xff0c;题解也落下了。而当我再回去想下载考试报告时。。。 现在更新的速度有这么快了么&#xff1f; 可惜题目还是考过的旧题&#xff0c;尤其对我们这种老油子来说&#xff0c;最大的好处是省去了阅读理解的烦恼。 平心而论&…

Unity利用UGUI RawImage组件制作转场动画

Unity利用UGUI RawImage组件制作转场动画 最近接到了一个unity全景图的小项目&#xff0c;由于在不同的场景之间转场时直接转会太过生硬&#xff0c;因此要求有个Alpha转场的动画。于是想到两种可行的方案&#xff1a; 一、UGUI方案 用UGUI显示当前屏幕纹理&#xff0c;然后…

【计算机图形学基础教程】MFC基本绘图函数1

MFC基本绘图函数 在Windows平台上&#xff0c;应用程序的图形设备接口&#xff08;Graphics Device Interface, GDI&#xff09;被抽象为设备上下文CDC类&#xff08;Device Context, DC&#xff09;。因此&#xff0c;直接接受图形数据信息的不是显示器和打印机等硬件设备&am…

【Linux】进程信号 --- 信号产生 信号递达和阻塞 信号捕捉

&#x1f34e;作者&#xff1a;阿润菜菜 &#x1f4d6;专栏&#xff1a;Linux系统编程 文章目录 一、预备知识二、信号产生1. 通过终端按键产生信号1.1 signal()1.2 core dump标志位、核心存储文件 2.通过系统调用向进程发送信号3.由软件条件产生信号3.1 alarm函数和SIGALRM信号…

Arthas--ognl表达式

背景 arthas执行ognl表达式&#xff0c;获取对应的jvm对象数据。ognl学习&#xff0c;可以查看上篇&#xff1a;https://xiaopanjia.blog.csdn.net/article/details/130425414 基本语法 ognl express -c {hashCode} --classLoaderClass {当前的全路径 ClassLoader 信息} -x …

Shell+VCS学习1

Shell脚本常见问题 mkdir rmdir rm mkdir 创建文件夹 mkdir -p filename-p 确保目录名称存在&#xff0c;不存在的就建一个。 mkdir -p runoob2/test若 runoob2 目录原本不存在&#xff0c;则建立一个。&#xff08;注&#xff1a;本例若不加 -p 参数&#xff0c;且原本 ru…