Linux设置自动重启脚本
Linux设置自动重启脚本
- 1.这个脚本的目的是自动配置一个重启计划,并在系统启动时自动执行重启操作,直到指定的次数耗尽。用户可以通过传递特定的参数来启动或关闭自动重启。
- 2.脚本功能概述:
- 1. 判断是否关闭自动重启(exit 参数)
- 2. 获取用户输入
- 3. 创建日志文件和配置文件
- 4. 创建重启脚本(rts.sh)
- 5. 设置脚本权限
- 6. 设置定时任务
- 7. 输出信息并重启
- 3.使用示例:
- 1.启动自动重启:
- 2.关闭自动重启:
1.这个脚本的目的是自动配置一个重启计划,并在系统启动时自动执行重启操作,直到指定的次数耗尽。用户可以通过传递特定的参数来启动或关闭自动重启。
vi auto_reboot.sh
#!/bin/bash
# 判断参数是否为 "exit",如果是则关闭自动重启功能
if [ "$1" = "exit" ]; then
# 删除定时任务并退出脚本
sudo sed -i '/.\/rts.sh/d' /etc/crontab
echo -e "\e[1;32m[关闭自动重启脚本]\e[0m"
exit 0
else
# 获取用户输入的重启次数和重启间隔时间
read -p "请输入自动重启的次数: " timesLeft
read -p "请输入重启间隔的时间(分钟): " interval
# 日志文件保存在当前脚本所在位置
logFile=$(pwd)/reboot.log
# 创建并写入重启次数到文件
echo "timesLeft=$timesLeft" | sudo tee /opt/times.left >/dev/null
# 创建脚本文件并写入内容
cat <<EOF | sudo tee /opt/rts.sh >/dev/null
#!/bin/bash
source /opt/times.left
if [ \$timesLeft -gt 0 ]; then
echo "还剩余\$timesLeft次重启" >> ${logFile}
date >> ${logFile}
echo >> ${logFile}
echo "timesLeft=\$((timesLeft-1))" > /opt/times.left
reboot
else
# 删除定时任务、脚本和文件
sed -i '/.\/rts.sh/d' /etc/crontab
rm -f /opt/rts.sh
rm -f /opt/times.left
chown \$USER:\$USER ${logFile}
echo "自动重启次数已耗尽,不再自动重启。" >> ${logFile}
fi
EOF
# 设置脚本文件权限
sudo chmod +x /opt/rts.sh
# 删除已有的定时任务,并添加新的定时任务
sudo sed -i '/.\/rts.sh/d' /etc/crontab
cronjob="*/$interval * * * * root /bin/bash /opt/rts.sh"
echo "$cronjob" | sudo tee -a /etc/crontab >/dev/null
echo -e "\e[1;32m[自动重启脚本配置完成]\e[0m"
echo -n "请稍候,系统即将重启中……"
# 等待 2 秒后重启系统
sleep 2
sudo reboot
fi
2.脚本功能概述:
自动重启功能:允许用户指定重启次数和重启间隔时间。
定时任务:脚本会创建一个定时任务,根据用户指定的间隔时间定期执行。
日志记录:每次重启时会记录到日志文件,记录重启次数和时间。
重启次数耗尽后:当重启次数耗尽时,删除定时任务和相关文件,不再继续重启。
详细解析:
1. 判断是否关闭自动重启(exit 参数)
if [ "$1" = "exit" ]; then
# 删除定时任务并退出脚本
sudo sed -i '/.\/rts.sh/d' /etc/crontab
echo -e "\e[1;32m[关闭自动重启脚本]\e[0m"
exit 0
如果用户传递了 exit 作为参数,脚本将删除 /etc/crontab 中的定时任务,表示关闭自动重启功能。
然后打印提示信息 [关闭自动重启脚本],并退出脚本。
2. 获取用户输入
read -p "请输入自动重启的次数: " timesLeft
read -p "请输入重启间隔的时间(分钟): " interval
用户将被要求输入重启的次数(timesLeft)和重启间隔的时间(interval,单位为分钟)。
3. 创建日志文件和配置文件
logFile=$(pwd)/reboot.log
echo "timesLeft=$timesLeft" | sudo tee /opt/times.left >/dev/null
logFile 变量存储日志文件的路径,日志文件将记录重启的时间和重启次数。
timesLeft(重启次数)被保存到 /opt/times.left 文件中,用于后续的定时任务。
4. 创建重启脚本(rts.sh)
cat <<EOF | sudo tee /opt/rts.sh >/dev/null
#!/bin/bash
source /opt/times.left
if [ \$timesLeft -gt 0 ]; then
echo "还剩余\$timesLeft次重启" >> ${logFile}
date >> ${logFile}
echo >> ${logFile}
echo "timesLeft=\$((timesLeft-1))" > /opt/times.left
reboot
else
# 删除定时任务、脚本和文件
sed -i '/.\/rts.sh/d' /etc/crontab
rm -f /opt/rts.sh
rm -f /opt/times.left
chown \$USER:\$USER ${logFile}
echo "自动重启次数已耗尽,不再自动重启。" >> ${logFile}
fi
EOF
脚本会创建一个新的脚本 /opt/rts.sh,用于执行自动重启逻辑。
脚本内容:
读取 /opt/times.left 文件中的剩余重启次数。
如果 timesLeft 大于 0,则:
打印剩余次数并记录当前时间到日志文件中。
减少 timesLeft,然后执行系统重启。
如果 timesLeft 为 0,则:
删除 /opt/rts.sh 脚本,删除重启次数文件 /opt/times.left。
删除 /etc/crontab 中的定时任务,表示自动重启结束。
5. 设置脚本权限
sudo chmod +x /opt/rts.sh
给 rts.sh 脚本文件加上可执行权限。
6. 设置定时任务
sudo sed -i '/.\/rts.sh/d' /etc/crontab
cronjob="*/$interval * * * * root /bin/bash /opt/rts.sh"
echo "$cronjob" | sudo tee -a /etc/crontab >/dev/null
删除 /etc/crontab 中的旧定时任务(如果存在)。
添加一个新的定时任务,定期执行 /opt/rts.sh 脚本,间隔时间为用户输入的 interval。
7. 输出信息并重启
echo -e "\e[1;32m[自动重启脚本配置完成]\e[0m"
echo -n "请稍候,系统即将重启中……"
sleep 2
sudo reboot
配置完成后,脚本打印 [自动重启脚本配置完成] 的提示信息。
然后暂停 2 秒后,执行系统重启。
3.使用示例:
1.启动自动重启:
执行脚本并输入需要的重启次数和间隔时间。
./auto_reboot.sh
输入:
自动重启的次数:3
重启间隔的时间:5 分钟
2.关闭自动重启:
如果希望停止自动重启,执行:
./auto_reboot.sh exit