Shell脚本
Reference
Shell笔记
shell自动清理30天以上的文件
shell自动备份PVE里的虚拟机系统文件
chatgpt做的自动备份pve镜像
shell 定时备份文件夹脚本以及删除过期备份
写一个断电按顺序自动关闭服务器的脚本
GPT:自动停止服务,控制关机
GPT: Shell 停止Docker 应用
GPT: Shell从文档读取配置信息
Shell传参给脚本,带参数运行
GPT:Shell停止Systemd服务
停止Moosefs服务
StartMoosefs.sh
StopMoosefs.sh
StopDocker.sh
StopSysyemService.sh
备份脚本
Linux运维常用脚本总结
网卡绑定bond配置脚本
自动取文件脚本
shell脚本: 同步两个本地文件夹
分割mysql-slow慢日志的脚本
解压不成功退出整个解压
Linux操作 :批量截取文件第一列,去重
文本的一些操作
nginx监控脚本
监控tomcat脚本
kafka监控脚本
zookeeper监控启动脚本
本文档使用 MrDoc 发布
-
+
首页
写一个断电按顺序自动关闭服务器的脚本
# linux写一个脚本 判断是否已断电切换为ups , 按一定的顺序关闭所有服务器 以下是一个简单的 Shell 脚本,可用于检测是否已切换为 UPS 并按照指定顺序关闭所有服务器: ``` #!/bin/bash # 检测UPS状态 ups_status=$(apctest | grep -m 1 "STATUS") if [[ $ups_status == *"ONBATT"* ]]; then echo "UPS 状态为:$ups_status" else echo "UPS 尚未切换到备用电源模式。" exit 1 fi # 关闭所有服务器 echo "开始按顺序关闭所有服务器" # 下面的命令需要替换成您真正使用的命令与参数 # 按照您想要执行的顺序,分别关闭每个服务器 echo "正在关闭服务器 A" ssh root@servera.example.com "shutdown -h now && exit" echo "正在关闭服务器 B" ssh root@serverb.example.com "shutdown -h now && exit" echo "正在关闭服务器 C" ssh root@serverc.example.com "shutdown -h now && exit" echo "所有服务器关闭完毕。" ``` 要使用此脚本,请将其保存为文件并将其设置为可执行,例如: $ chmod +x shutdown-servers.sh 接下来,您可以运行此脚本以检查 UPS 状态并按照指定顺序关闭所有服务器: ``` $ ./shutdown-servers.sh ``` 请注意,上述脚本中的 ssh 命令需要您将其替换为适合您自己的命令与参数,并根据您的实际网络拓扑和服务器名称进行设置。此外,还应确保连接到每个服务器的用户具有在不提供密码的情况下关闭系统的权限。 # 确保一台服务器完全关闭后 再关另外一台服务器 要确保在关闭一台服务器之前先关闭另一台服务器,您可以编写一个包含连续关机命令的脚本,并使用 SSH 将它们发送到每个服务器上执行。为了避免错误,最好等待第一台服务器完全关闭后再关闭第二台服务器。 以下是一个示例脚本: ``` #!/bin/bash # 关闭第一台服务器 ssh user@server1 "shutdown -h now" # 等待第一台服务器完全关闭 echo "Waiting for server1 to shut down..." while ping -c 1 server1 &> /dev/null; do sleep 1; done echo "Server1 has been shut down." # 关闭第二台服务器 ssh user@server2 "shutdown -h now" ``` 此脚本首先通过 SSH 连接到第一台服务器并发出关机命令,然后开始轮询服务器是否在线。一旦服务器不再响应 ping 命令,脚本便认为服务器已关闭并打印消息。接下来,脚本按照相同的方法连接到第二台服务器并重复这个过程。 请注意,上述脚本需要您将 user 替换为您用于连接到服务器的用户名,并分别将 server1 和 server2 替换为您的服务器名称或 IP 地址。此外,这个脚本还假设您运行它的用户具有在不提供密码的情况下通过 SSH 关闭服务器的权限。 # 按顺序停止服务等服务完全停止后关机 要按照指定顺序停止服务并在所有服务完全停止后关闭服务器,您可以使用以下 Shell 脚本: ``` #!/bin/bash # 定义要关闭的服务名称和顺序 services=(nginx mysql redis rabbitmq) # 停止每个服务并等待它们完成 for s in "${services[@]}" do echo "Stopping $s..." systemctl stop $s sleep 5 while systemctl is-active $s &>/dev/null; do sleep 1; done done # 关闭服务器 echo "All services have been stopped. Shutting down the server..." shutdown -h now ``` 此脚本首先定义了要停止的服务名称及其顺序(nginx、mysql、redis 和 rabbitmq),然后通过循环迭代它们。在每次迭代中,脚本会发出 systemctl stop 命令来停止服务,并使用 sleep 在5秒钟内等待服务停止。然后,要检查该服务是否已完全停止,请使用 systemctl is-active 命令连续轮询,直到该服务不再处于活动状态。 这是一个 bash 脚本中的 while 循环语句。该脚本旨在检查名为 $s 的系统服务是否处于活动状态,并等待其停止。 解释一下每个部分的含义: while:这是一个关键字,它指示后面跟随的条件是一个循环条件。 systemctl is-active $s &>/dev/null:这是循环条件。$s 是一个变量,它代表要检查的 systemd 服务的名称。此命令将检查服务的运行状态,并使用重定向操作符将所有输出都转发到 /dev/null(即舍弃不需要的输出)。 do:这是一个关键字,它指示循环体的开始位置。 sleep 1:这个命令使当前进程休眠一秒钟。 done:这是一个关键字,它指示循环体的结束位置。 因此,脚本会以一秒的间隔检查所指定的服务状态,如果发现服务已经停止,就会结束循环。可以将循环体替换为其他适当的命令来执行其他操作,例如发送通知或记录日志等等。 在所有服务都成功关闭后,脚本将执行 shutdown -h now 命令来关闭服务器。请注意,此脚本需要系统管理员权限才能运行。 如果您要使用此脚本,只需将其保存为文件并将其设置为可执行即可: ``` $ chmod +x stop-and-shutdown.sh ``` 接下来,只需运行此脚本即可依次停止指定服务并关闭服务器: ``` $ ./stop-and-shutdown.sh ``` 请注意,这个脚本假设您使用的是 Systemd 系统。如果您正在使用其他服务管理工具,请调整相应的命令和选项以匹配您的环境。 # 发送指令给另外一台服务器B 执行服务器B上的脚本 要从服务器 A 发送指令给服务器 B 并在服务器 B 上执行脚本,您可以使用 SSH 命令连接到服务器 B,并在命令行中运行脚本的路径或命令。您可以使用以下命令将脚本发送到服务器 B 并执行它: ``` ssh user@server_b '/path/to/script.sh' ``` 这个命令通过 SSH 连接到远程服务器 B 并运行 /path/to/script.sh 路径中包含的脚本。请记住,您需要将 user 替换为一个有效的用户名,该用户名在服务器 B 上有相应的权限和许可。同样地,您需要将 server_b 替换为您要连接的服务器 B 的名称或 IP 地址。 另外,请确保服务器 A 上的用户具有使用 SSH 连接到服务器 B 的必要权限。如果您第一次以某个目标主机(服务器 B)为目标连接,则会出现询问是否添加主机的提示;确认即可。您需要对 Jumphost 和 Target Host 都做如上操作,方可远程登录目标主机。
dz
2023年5月7日 23:05
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码