Linux设置自动重启脚本实现方式

 更新时间:2025年10月10日 08:50:32   作者:黑蛋同志  
这篇文章主要介绍了Linux设置自动重启脚本实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一、这个脚本的目的是自动配置一个重启计划

并在系统启动时自动执行重启操作,直到指定的次数耗尽。

用户可以通过传递特定的参数来启动或关闭自动重启。

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

二、脚本功能概述

  • 自动重启功能:允许用户指定重启次数和重启间隔时间。
  • 定时任务:脚本会创建一个定时任务,根据用户指定的间隔时间定期执行。
  • 日志记录:每次重启时会记录到日志文件,记录重启次数和时间。
  • 重启次数耗尽后:当重启次数耗尽时,删除定时任务和相关文件,不再继续重启。

详细解析:

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 秒后,执行系统重启。

三、使用示例

1.启动自动重启

执行脚本并输入需要的重启次数和间隔时间。

./auto_reboot.sh

输入:

  • 自动重启的次数:3
  • 重启间隔的时间:5 分钟

2.关闭自动重启

如果希望停止自动重启,执行:

./auto_reboot.sh exit

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • apache的源码安装详细过程全纪录

    apache的源码安装详细过程全纪录

    这篇文章主要介绍了apache的源码安装详细过程全纪录,需要的朋友可以参考下
    2015-01-01
  • 开启Apache mod_rewrite模块示例代码

    开启Apache mod_rewrite模块示例代码

    这篇文章主要介绍了如何开启Apache mod_rewrite模块,需要的朋友可以参考下
    2014-03-03
  • 详解CentOS6.8 安装FTP及添加用户

    详解CentOS6.8 安装FTP及添加用户

    本篇文章主要介绍了详解CentOS6.8 安装FTP及添加用户 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • linux中的内核死锁调试

    linux中的内核死锁调试

    这篇文章主要介绍了linux中的内核死锁调试方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • 详解CentOS5.5 下搭建 PHP 环境(最佳的LAMP环境)

    详解CentOS5.5 下搭建 PHP 环境(最佳的LAMP环境)

    本篇文章详细介绍了详解CentOS5.5 下搭建 PHP 环境(最佳的LAMP环境),有需要的小伙伴可以参考下。
    2016-10-10
  • CentOS中设置yum源的详细步骤

    CentOS中设置yum源的详细步骤

    在 CentOS 中配置 YUM 源(也称为仓库或存储库)是一个常见的任务,通常用于确保软件包从正确的服务器下载,本文给大家介绍了以设置阿里云镜像源为例进行说明CentOS中设置yum源的详细步骤,需要的朋友可以参考下
    2025-09-09
  • CentOS 6.4系统下编译安装LNMP和配置PHP环境具体步骤

    CentOS 6.4系统下编译安装LNMP和配置PHP环境具体步骤

    下面介绍的是CentOS 6.4系统下编译安装LNMP和配置PHP环境具体步骤,感兴趣的朋友可以参考下,希望对你配置php环境有所帮助
    2013-05-05
  • 2016年如何选择Linux发行版

    2016年如何选择Linux发行版

    这篇文章主要介绍了2016年选择Linux发行版的标准和原则,挑选几个将在2016 年里大放光彩的最佳发行版给大家介绍一下,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • linux增加iptables防火墙规则的示例

    linux增加iptables防火墙规则的示例

    这篇文章主要介绍了linux增加iptables防火墙规则的示例,大家在使用的时候要把规则后的中文注释去掉
    2014-01-01
  • Linux按键驱动测试方式

    Linux按键驱动测试方式

    这篇文章主要介绍了Linux按键驱动测试方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05

最新评论