Linux設置自動重啟腳本實現(xiàn)方式
一、這個腳本的目的是自動配置一個重啟計劃
并在系統(tǒng)啟動時自動執(zhí)行重啟操作,直到指定的次數(shù)耗盡。
用戶可以通過傳遞特定的參數(shù)來啟動或關閉自動重啟。
vi auto_reboot.sh
#!/bin/bash
# 判斷參數(shù)是否為 "exit",如果是則關閉自動重啟功能
if [ "$1" = "exit" ]; then
# 刪除定時任務并退出腳本
sudo sed -i '/.\/rts.sh/d' /etc/crontab
echo -e "\e[1;32m[關閉自動重啟腳本]\e[0m"
exit 0
else
# 獲取用戶輸入的重啟次數(shù)和重啟間隔時間
read -p "請輸入自動重啟的次數(shù): " timesLeft
read -p "請輸入重啟間隔的時間(分鐘): " interval
# 日志文件保存在當前腳本所在位置
logFile=$(pwd)/reboot.log
# 創(chuàng)建并寫入重啟次數(shù)到文件
echo "timesLeft=$timesLeft" | sudo tee /opt/times.left >/dev/null
# 創(chuàng)建腳本文件并寫入內容
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 "自動重啟次數(shù)已耗盡,不再自動重啟。" >> ${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 "請稍候,系統(tǒng)即將重啟中……"
# 等待 2 秒后重啟系統(tǒng)
sleep 2
sudo reboot
fi
二、腳本功能概述
- 自動重啟功能:允許用戶指定重啟次數(shù)和重啟間隔時間。
- 定時任務:腳本會創(chuàng)建一個定時任務,根據(jù)用戶指定的間隔時間定期執(zhí)行。
- 日志記錄:每次重啟時會記錄到日志文件,記錄重啟次數(shù)和時間。
- 重啟次數(shù)耗盡后:當重啟次數(shù)耗盡時,刪除定時任務和相關文件,不再繼續(xù)重啟。
詳細解析:
1.判斷是否關閉自動重啟(exit 參數(shù))
if [ "$1" = "exit" ]; then
# 刪除定時任務并退出腳本
sudo sed -i '/.\/rts.sh/d' /etc/crontab
echo -e "\e[1;32m[關閉自動重啟腳本]\e[0m"
exit 0
如果用戶傳遞了 exit 作為參數(shù),腳本將刪除 /etc/crontab 中的定時任務,表示關閉自動重啟功能。
然后打印提示信息 [關閉自動重啟腳本],并退出腳本。
2.獲取用戶輸入
read -p "請輸入自動重啟的次數(shù): " timesLeft read -p "請輸入重啟間隔的時間(分鐘): " interval
用戶將被要求輸入重啟的次數(shù)(timesLeft)和重啟間隔的時間(interval,單位為分鐘)。
3.創(chuàng)建日志文件和配置文件
logFile=$(pwd)/reboot.log echo "timesLeft=$timesLeft" | sudo tee /opt/times.left >/dev/null
- logFile 變量存儲日志文件的路徑,日志文件將記錄重啟的時間和重啟次數(shù)。
- timesLeft(重啟次數(shù))被保存到 /opt/times.left 文件中,用于后續(xù)的定時任務。
4.創(chuàng)建重啟腳本(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 "自動重啟次數(shù)已耗盡,不再自動重啟。" >> ${logFile}
fi
EOF
腳本會創(chuàng)建一個新的腳本 /opt/rts.sh,用于執(zhí)行自動重啟邏輯。
腳本內容:
- 讀取 /opt/times.left 文件中的剩余重啟次數(shù)。
如果 timesLeft 大于 0,則:
- 打印剩余次數(shù)并記錄當前時間到日志文件中。
- 減少 timesLeft,然后執(zhí)行系統(tǒng)重啟。
如果 timesLeft 為 0,則:
- 刪除 /opt/rts.sh 腳本,刪除重啟次數(shù)文件 /opt/times.left。
- 刪除 /etc/crontab 中的定時任務,表示自動重啟結束。
5.設置腳本權限
sudo chmod +x /opt/rts.sh
給 rts.sh 腳本文件加上可執(zhí)行權限。
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 中的舊定時任務(如果存在)。
添加一個新的定時任務,定期執(zhí)行 /opt/rts.sh 腳本,間隔時間為用戶輸入的 interval。
7.輸出信息并重啟
echo -e "\e[1;32m[自動重啟腳本配置完成]\e[0m" echo -n "請稍候,系統(tǒng)即將重啟中……" sleep 2 sudo reboot
配置完成后,腳本打印 [自動重啟腳本配置完成] 的提示信息。
然后暫停 2 秒后,執(zhí)行系統(tǒng)重啟。
三、使用示例
1.啟動自動重啟
執(zhí)行腳本并輸入需要的重啟次數(shù)和間隔時間。
./auto_reboot.sh
輸入:
- 自動重啟的次數(shù):3
- 重啟間隔的時間:5 分鐘
2.關閉自動重啟
如果希望停止自動重啟,執(zhí)行:
./auto_reboot.sh exit
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
linux 使用bond實現(xiàn)雙網(wǎng)卡綁定單個IP的示例代碼
這篇文章主要介紹了linux 使用bond實現(xiàn)雙網(wǎng)卡綁定單個IP的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-08-08
如何查看Apache的連接數(shù)和當前連接數(shù)
查看Apache的連接數(shù)和當前的連接數(shù)以及IP訪問次數(shù),下面有個不錯的示例,大家可以參考下,希望對大家解決問題有所幫助2014-01-01
詳解如何在 Linux 中安裝最新的 Python 3.6 版本
本篇文章主要介紹了詳解如何在 Linux 中安裝最新的 Python 3.6 版本,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03
解決安裝zabbix之后登陸報錯:zabbix Details Cannot connec
檢查PHP配置文件(php.ini)中mysql.default_socket路徑是否與MySQL實際socket文件位置一致,確認MySQL服務已啟動且權限正確,必要時手動指定socket路徑或重啟服務2025-07-07

