linux開機自啟
背景
目前要部署一個spring boot框架的jar包,實現開機啟動項目或者應用掛掉了 執行啟動腳本
在root目錄下有一個啟動項目的腳本: app_start.sh
app_start.sh 里面內容是:
nohup java -jar xxx.jar>/dev/null 2>&1 &
linux執行 sh /root/app_start.sh 可以后台啟動xxx.jar應用
需要對app_start腳本和 xxx.jar包 需要設置可執行權限(重要):
chmod +x /root/app_start.sh
chmod +x /root/ xxx.jar
一、開機自定義執行命令(腳本)(/etc/rc.d/rc.local)
簡介
/etc/rc.d/rc.local 用於添加開機啟動命令
/etc/rc.local是/etc/rc.d/rc.local的軟連接
軟連接相當於windows的快捷鍵
下圖是linux服務器的啟動流程,由此可知/etc/rc.d/rc.local文件是開機的時候會執行
配置開機執行
第一步:/etc/rc.local文件添加啟動命令
vi /etc/rc.local
第二步:設置/etc/rc.d/rc.local 文件的可執行權限(重要)
文件不設置可執行權限,第一步配置的啟動命令不會執行;
chmod +x /etc/rc.d/rc.local
第三步:重啟服務器;查看應用是否啟動成功
reboot
二、定時任務crontab
簡介
Linux crontab是用來定期執行程序的命令。
當安裝完成操作系統之后,默認便會啟動此任務調度命令。
crond 命令每分鍾會定期檢查是否有要執行的工作,如果有要執行的工作便會自動執行該工作。
注意:新創建的 cron 任務,不會馬上執行,至少要過 2 分鍾后才可以,當然你可以重啟 cron 來馬上執行。
1、cron是服務名稱;
2、crond是后台進程;
3、crontab是計划任務表;
由上面的簡介就知道crontab,是linux系統開機默認會啟動的定時任務,並且每分鍾會定期檢查是否有要執行的工作;
這樣我們就能定時的執行一個腳本,每10分鍾、每半個小時的執行一次腳本;
開機自啟&判斷應用沒啟動,執行啟動腳本
我們可以每10分鍾、每半個小時 執行一次啟動腳本的命令(命令如下),來保證應用始終是啟動的,當然第一次 執行命令應用啟動完成了,后面在執行啟動命令的時候 報端口占用的異常,但是不影響已經啟動的應用,所以也能滿足了開機自啟的需求。
sh /root/app_start.sh
基於此我們可以寫一個判斷腳本,判斷 自啟應用的端口是否被占用了,端口沒被占用才執行啟動腳本,避免無效的執行 啟動應用腳本命令(sh /root/app_start.sh )
假如啟動應用腳本命令(sh /root/app_start.sh )的應用端口是 9999,那么可以有一個/root/task_start.sh的腳本
/root/task_start.sh 腳本命令如下:
#!/bin/sh
tomcat=`netstat -an | grep ":9999" | awk '$1 == "tcp" && $NF == "LISTEN" {print $0}' | wc -l`
if [ $tomcat -eq 0 ];then
#如果端口沒有占用的話要怎么怎么樣
sh /root/app_start.sh
fi
這樣就根據業務需求 每10分鍾、半個小時執行一次命令 sh /root/task_start.sh
來判斷應用的端口如果沒有被占用,端口不存在說明應用沒有運行,執行啟動項目的命令(sh /root/app_start.sh )
crontab 添加周期性執行腳本
crontab命令
crontab [-u username] //省略用戶表表示操作當前用戶的crontab
-e (編輯工作表)
-l (列出工作表里的命令)
crontab時間格式實例
- 每分鍾執行一次
* * * * * sh /root/task_start.sh
- 每10分鍾執行一次
*/10 * * * * sh /root/task_start.sh
- 每個小時執行一次
0 */1 * * * sh /root/task_start.sh
編輯周期性執行腳本
新增 每10分鍾執行啟動腳本
crontab -e
驗證定時任務 是否新增完成
-
crontab -l 命令
-
Linux 查看定時器Crontab日志
查看命令如下
tail -f /var/log/cron
最后驗證應用是否自啟
首先:可以手動關閉應用,10分鍾后看應用是否還在啟用中(首次驗證可以把定時任務改成每分鍾執行,來快速驗證一下)
最后:重啟服務器,查看應用是否在運行
reboot