ubuntu重启测试脚本

脚本代码

linux上多次重启,USB识别信息记录自动测试脚本
记录重启时usb设备枚举的信息,并存到log中。重启测试次数可以自己设置。

#!/bin/bash
logpath="/home/xaob/rebootlog.txt"      #log文件
templogpath=""${HOME}""/temptest.txt""  #零时log文件
numpath="/home/xaob/numtest.txt"        #测试次数文件  echo 0>numtest.txt 可以重置测试次数
setpath="/home/xaob/setnum.txt"         #设置测试最大次数,测试测试大于该值,停止测试,中途拔掉设备,会测试失败,也会停止测试
#检测文件是否存在
if test -e $setpath
then
  echo exisit
else
  echo creat setnum.txt
  echo 10 > $setpath
fi
#获取设置次数
num=$(cat $setpath)
#获取测试次数
testnum=$(($(cat $numpath)+1))
echo $testnum
#累加并输出次数
echo $testnum > $numpath
#输出log
echo ----------------------------------------- >> $logpath
date >> $logpath
echo ------------------$testnum-------------- >> $logpath
lsusb >> $logpath
#lsusb > $templogpath

#查找文件内容
#grep "SEGGER" $templogpath> /dev/null
#if [ $? -eq 0 ]
#then
	if test  $[testnum] -gt $[num]
	then
	   echo end of test
	else
	 # echo start
	  shutdown -r now
	fi
#fi

开机启动一

方法一

设置硬链接

sudo ln ****.sh /etc/init.d/****.sh

设置开机启动

sudo update-rc.d new_service.sh defaults 90    
#sudo update-rc.d new_service.sh enable 5 defaults 90    

方法二(推荐)

将默认的shell改成bash的方法:

  1. 在终端执行 sudo dpkg-reconfigure dash,然后选择 no (推荐)

  2. sudo rm /bin/sh
    sudo ln -s /bin/bash /bin/sh
    或者将 /etc/rc.local 中的/bin/sh -e 改为/bin/bash

  3. sudo vim /ext/rc.local
    在 /etc/rc.local种 exit 0 前添加下面代码

echo "你的密码"|sudo -S bash  /home/user/xx.sh 

-e 在脚本种如果有判断 $? 一旦上条语句返回值错误(非0),脚本就会自动退出.

改启动等待时间

sudo vim /etc/default/grub

修改:
GRUB_DEFAULT=0 # 从0开始计数,默认是0,想要哪个当启动项就改成相应的数字
GRUB_TIMEOUT=10 # 等待选择时间,单位是秒,自己随便设

修改完之后需要运行命令:sudo update-grub,使修改生效

开机启动二

这个与上面开机启动的区别在于:启动的顺序不一样,上面方法二的在界面出来后,过一段时间才运行;方法一在界面还没出来就运行了,具体可以开一下linux的启动顺序。

本方法在界面出来的时候同步运行,比如你要开机打开摄像头显示,这个方法就比较适用,上面方法一运行太早显示不出来,方法二得等一下,所以这个方法就比较适用。
脚本

#!/bin/bash
cd temp/ #相对路径和绝对路径都可以
echo "你的密码"|sudo -S ./xxtest.sh #这个是sudo 运行 不需要的直接 ./xxtest.sh

添加开机启动
alt+F2,输入gnome-session-properties
在command栏里 直接点击浏览,选择刚才写的脚本

问题

方法一 可以执行,但是当测试一两波之后(中间修改过代码),会失效。
方法二 可以执行像echo xx> xx.txt的命令, 但是就是不能执行脚本,后面发现应该是路径和-e得问题,代码如下:

echo start  > /home/user/log.txt #可以执行
bash  /home/user/xx.sh #不会执行
echo end > /home/user/log.txt #可以执行
exit 0

难用,非常的奇怪。

解决

改rc.local

echo start  > /home/user/log.txt #可以执行
echo "你的密码"|sudo -S bash  /home/user/xx.sh #不会执行
echo end > /home/user/log.txt #可以执行
exit 0

改代码

代码中不能使用

logpath=""${HOME}""/rebootlog.txt"" 
numpath=""${HOME}""/numtest.txt""
templogpath=""${HOME}""/temptest.txt""
setpath=""${HOME}""/setnum.txt""

改成绝对路径

logpath="/home/user/rebootlog.txt" 
<think>我们正在寻找一个用于服务器冷重启测试的自动化脚本。 冷重启(Cold Reboot)指的是完全关闭电源后再重新启动,与热重启(Hot Reset)不同,热重启通常不涉及断电。 根据引用[2]中提到的热重启,我们可以推断冷重启需要断电操作。在服务器环境中,冷重启测试通常用于验证系统在完全断电后重新上电的稳定性和可靠性。 由于不同服务器的硬件管理方式不同(如IPMI、iDRAC、iLO等),脚本通常需要调用相应的管理工具(如ipmitool)来实现断电和重新上电。 以下是一个使用ipmitool实现服务器冷重启的示例脚本: 1. 首先,确保服务器支持IPMI,并且脚本运行的主机可以访问服务器的BMC(Baseboard Management Controller)。 2. 使用ipmitool发送关机指令(这里我们直接做冷重启,所以会先强制关机,然后再开机)。 注意:冷重启通常包括以下步骤: - 强制关闭服务器电源(如果服务器当前是运行状态) - 等待一段时间确保完全断电 - 重新上电 但是,有些情况下,我们可以直接使用ipmitool的power cycle命令,该命令会先关闭电源,然后再打开,相当于冷重启。 因此,我们可以这样编写脚本: ```bash #!/bin/bash # 服务器冷重启测试脚本 # 定义IPMI连接参数 BMC_IP="192.168.1.100" # BMC的IP地址 USERNAME="admin" # BMC用户名 PASSWORD="password" # BMC密码 # 使用ipmitool执行电源循环(冷重启) ipmitool -I lanplus -H $BMC_IP -U $USERNAME -P $PASSWORD power cycle # 注意:power cycle命令会先关闭电源,然后再打开,实现冷重启。 ``` 然而,如果我们需要在冷重启后验证系统是否成功启动,可以添加一些检查,比如在重启后等待一段时间,然后尝试ping服务器的业务IP,或者检查某个服务是否可用。 下面是一个更完整的示例,包括重启前的状态检查、执行冷重启重启后的状态检查和超时处理: ```bash #!/bin/bash # 服务器冷重启测试脚本(带状态检查) # 配置参数 BMC_IP="192.168.1.100" USERNAME="admin" PASSWORD="password" SERVER_IP="192.168.1.101" # 服务器的业务IP TIMEOUT=300 # 等待服务器启动的最大等待时间(秒) INTERVAL=10 # 检查间隔(秒) # 函数:检查服务器是否在线 check_server_online() { ping -c 1 $SERVER_IP > /dev/null 2>&1 return $? } # 记录开始时间 start_time=$(date +%s) # 首先检查服务器当前是否在线 if check_server_online; then echo "服务器当前在线,开始执行冷重启测试..." else echo "服务器当前不在线,无法执行测试。" exit 1 fi # 执行冷重启 echo "执行冷重启命令..." ipmitool -I lanplus -H $BMC_IP -U $USERNAME -P $PASSWORD power cycle # 等待服务器断电(这里我们等待一段时间,确保断电) echo "等待服务器断电..." sleep 30 # 然后等待服务器重新启动 echo "等待服务器重新启动..." elapsed_time=0 server_online=0 while [ $elapsed_time -lt $TIMEOUT ]; do if check_server_online; then server_online=1 break fi sleep $INTERVAL elapsed_time=$(($(date +%s) - start_time)) done # 检查结果 if [ $server_online -eq 1 ]; then echo "服务器在 $elapsed_time 秒内成功启动。" exit 0 else echo "服务器在 $TIMEOUT 秒内未启动,测试失败。" exit 1 fi ``` 注意: 1. 这个脚本使用了ping来检查服务器是否在线,但实际环境中可能需要更复杂的检查(例如检查某个端口是否开放)。 2. 脚本中等待断电的时间(30秒)可能需要根据实际情况调整。 3. 使用ipmitool需要确保网络可达和认证信息正确。 如果服务器没有IPMI功能,可能需要通过其他方式(如PDU电源控制)来实现断电和上电,但原理类似。 另外,引用[4]中提到,死机比重启的危害更大,在测试中我们也要注意避免频繁冷重启对硬件造成损害。 因此,建议在测试中控制冷重启的次数,并且每次测试之间留出足够的冷却时间。 我们可以将上述脚本扩展为多次循环测试,并记录每次测试的结果: ```bash #!/bin/bash # 服务器冷重启循环测试脚本 # 配置参数(同上) BMC_IP="192.168.1.100" USERNAME="admin" PASSWORD="password" SERVER_IP="192.168.1.101" TIMEOUT=300 INTERVAL=10 MAX_TESTS=10 # 最大测试次数 # 函数:检查服务器是否在线(同上) check_server_online() { ping -c 1 $SERVER_IP > /dev/null 2>&1 return $? } # 执行多次测试 for ((test_count=1; test_count<=$MAX_TESTS; test_count++)); do echo "开始第 $test_count 次冷重启测试..." # 记录开始时间 start_time=$(date +%s) # 检查服务器是否在线 if ! check_server_online; then echo "第 $test_count 次测试开始前服务器不在线,测试终止。" exit 1 fi # 执行冷重启 ipmitool -I lanplus -H $BMC_IP -U $USERNAME -P $PASSWORD power cycle # 等待断电 sleep 30 # 等待服务器重新启动 echo "等待服务器重新启动..." elapsed_time=0 server_online=0 while [ $elapsed_time -lt $TIMEOUT ]; do if check_server_online; then server_online=1 break fi sleep $INTERVAL elapsed_time=$(($(date +%s) - start_time)) done if [ $server_online -eq 1 ]; then echo "第 $test_count 次测试:服务器在 $elapsed_time 秒内成功启动。" else echo "第 $test_count 次测试:服务器在 $TIMEOUT 秒内未启动,测试失败。" exit 1 fi # 每次测试后等待一段时间,让服务器稳定运行 sleep 60 done echo "所有测试完成。" ``` 以上脚本实现了多次冷重启测试,每次测试后等待60秒再开始下一次测试。 请注意,这些脚本仅为示例,实际使用时需要根据具体环境调整参数和检查逻辑。 另外,如果测试环境中没有IPMI,可能需要使用其他工具(如服务器自带的带外管理工具)或通过物理方式控制电源(如智能PDU),但脚本结构类似。 在编写脚本时,务必注意安全,避免因脚本错误导致服务器不断重启。 最后,引用[5]中提到了hwclock命令,在重启后可能需要检查系统时钟是否正常,特别是如果服务器没有电池支持的硬件时钟,冷重启后时间可能会重置。但一般来说,在服务器启动后,如果配置了NTP,时间会自动同步。如果需要,可以在脚本中加入时间检查。 例如,在服务器重启后,我们可以通过SSH连接到服务器并检查时间(这需要预先配置SSH免密登录): ```bash # 在服务器启动后,检查系统时间(示例) current_time=$(ssh root@$SERVER_IP "date") echo "服务器当前时间: $current_time" ``` 但请注意,这会使脚本更加复杂,并且需要处理SSH连接问题。因此,在基础脚本中我们只做在线检查。 以上脚本仅供参考,请根据实际情况修改。 §§相关问题§§ 1. 冷重启和热重启有什么区别? 2. 如何监控服务器冷重启过程中的硬件状态? 3. 除了IPMI,还有哪些方法可以实现服务器的远程冷重启?</think>以下是一个用于服务器冷重启测试的自动化脚本方案及说明: ### 服务器冷重启测试脚本 ```bash #!/bin/bash # 服务器冷重启测试脚本 (cold_reboot_test.sh) # 功能:通过IPMI实现服务器冷重启(完全断电后重启)并记录测试结果 # 配置参数 BMC_IP="192.168.1.100" # 服务器BMC IP地址 USERNAME="admin" # BMC用户名 PASSWORD="your_password" # BMC密码 TEST_CYCLES=5 # 测试循环次数 LOG_FILE="cold_reboot.log" # 日志文件 # 初始化日志 echo "===== 冷重启测试开始 $(date) =====" > $LOG_FILE for ((i=1; i<=$TEST_CYCLES; i++)); do echo "--- 测试周期 $i/$TEST_CYCLES ---" | tee -a $LOG_FILE # 1. 强制断电(冷启动准备) ipmitool -I lanplus -H $BMC_IP -U $USERNAME -P $PASSWORD power off | tee -a $LOG_FILE echo "电源已断开,等待10秒..." | tee -a $LOG_FILE sleep 10 # 2. 冷启动 ipmitool -I lanplus -H $BMC_IP -U $USERNAME -P $PASSWORD power on | tee -a $LOG_FILE echo "冷启动命令已发送,等待系统启动..." | tee -a $LOG_FILE # 3. 检测系统状态 timeout 300 bash -c "while ! ping -c 1 -W 1 $SERVER_IP &>/dev/null; do echo '等待系统启动...'; sleep 10 done" if [ $? -eq 0 ]; then echo "$(date) - 周期 $i: 冷启动成功" | tee -a $LOG_FILE else echo "$(date) - 周期 $i: 错误!系统未在5分钟内响应" | tee -a $LOG_FILE fi # 4. 等待系统稳定 sleep 60 done echo "===== 测试完成 =====" | tee -a $LOG_FILE ``` ### 关键功能说明 1. **冷重启实现**: - 通过`ipmitool power off`实现完全断电(引用[2]) - 等待10秒确保电容放电(真冷启动) - 使用`ipmitool power on`重新上电 2. **状态检测**: - 持续检测服务器IP可达性(ping测试) - 设置300秒超时(5分钟)防止无限等待 - 记录每次冷启动的成功/失败状态 3. **安全机制**: - 循环间60秒等待确保系统稳定(引用[4]) - 日志记录所有操作和结果 - 避免高频重启保护硬件 ### 使用准备 1. **依赖安装**: ```bash # Ubuntu/Debian sudo apt install ipmitool # RHEL/CentOS sudo yum install ipmitool ``` 2. **配置说明**: - 修改`BMC_IP`、`USERNAME`、`PASSWORD`为实际BMC信息 - 设置`SERVER_IP`为服务器业务IP - 调整`TEST_CYCLES`定义测试次数 3. **执行命令**: ```bash chmod +x cold_reboot_test.sh ./cold_reboot_test.sh ``` ### 结果验证 1. 检查日志文件`cold_reboot.log`: ``` ==== 冷重启测试开始 Wed Jun 1 14:30:00 CST 2023 ==== --- 测试周期 1/5 --- 电源已断开,等待10秒... 冷启动命令已发送,等待系统启动... 等待系统启动... Wed Jun 1 14:35:22 CST 2023 - 周期 1: 冷启动成功 ... ==== 测试完成 ==== ``` 2. 附加检查建议: ```bash # 检查系统日志是否有异常 journalctl -b | grep -i error # 验证硬件时钟同步(引用[5]) hwclock --compare ``` > **注意事项**: > 1. 确保BMC网络畅通且凭证正确 > 2. 生产环境建议在业务低峰期执行 > 3. 首次执行前建议手动验证IPMI命令有效性 > 4. 关键服务器建议配置看门狗(引用[1])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值