开发者

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

开发者 https://www.devze.com 2025-10-10 10:01 出处:网络 作者: 黑蛋同志
目录一、这个脚本的目的是自动配置一个重启计划二、脚本功能概述1.判断是否关闭自动重启(exit 参数)2.获取用户输入3.创建日志文件和配置文件4.创建重启脚本(rts.sh)5.设置脚本权限6.设置定时任务7.输出信息并重启
目录
  • 一、这个脚本的目的是自动配置一个重启计划
  • 二、脚本功能概述
    • 1.判断是否关闭自动重启(exit 参数)
    • 2.获取用户输入
    • 3.创建日志文件和配置文件
    • 4.创建重启脚本(rts.sh)
    • 5.设置脚本权限
    • 6.设置定时任务
    • 7.输出信息并重启
  • 三、使用示例
    • 1.启动自动重启
    • 2.关闭自动重启
  • 总结

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

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

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

    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 javascript"还剩余\$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 <&编程客栈lt;EOF | sudo tee /opt/rtsjs.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
    

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号