在linux開發過程中,往往需要對已經開發好的軟體進行打包,一鍵安裝後程式能自動後台啟動,當程序意外關閉後能自動重啟,本篇來介紹實現過程。
對功能進行拆分
1、實現程式後台執行,掛掉重啟的***指令碼
2、將***指令碼放入開機啟動項
3、實現軟體打包指令碼
首先寫個簡單的程式,供***指令碼測試,下述c**編譯生成test
#include int main()
}
以下是***指令碼monitor.sh
#bin/bash
#載入環境變數
source /etc/profile
systemctl stop firewalld
systemctl disable firewalld.service
iptables -f
#執行程式路徑
exe_path="/mnt/hgfs/ubuntu/install"
#***日誌路徑
log_path="/mnt/hgfs/ubuntu/install/log.out"
#監聽頻率
monitor_time=3
#是否開啟監聽
working_flag=true
cd $exe_path
#根據訊號進行開關 kill -10 程序號 開啟監聽/kill -12 程序號 關閉監聽
trap "monitor_start" 10
trap "monitor_stop" 12
monitor_start()
monitor_stop()
while true
doif [ $working_flag = "false" ]
then
sleep 1
continue
fi#在執行程式路徑下查詢需要執行的軟體名稱'
configi=$(ls |grep test)
count=0
for loop in $configi
do#檢視程式是否在後台執行,不在則啟動軟體
procnum=$(ps -ef |grep $loop|grep -v grep|wc -l)
if [ $procnum -eq 0 ]
then
if [ -f /etc/redhat-release ]
then
$exe_path$loop >/dev/null &
runexe="$exe_path/$loop >/dev/null &"
echo $runexe >> $log_path
echo start $loop
else
echo $exe_path/$loop
echo "$exe_path/$loop start\n" >> $log_path
$exe_path/$loop > /dev/null &
echo statrt $loop
fifi
done
sleep $monitor_time
done
***指令碼測試,以下是執行結果,***是迴圈執行的,ctrl+c退出***後,可以看到test程式已經在後台執行。
下面我將舉個例子實現軟體打包,如下圖,例項中需要打包的軟體資料夾為insatll資料夾,test為可執行程式,monitor為監聽指令碼 ,install.sh為安裝命令
install.sh**如下:
#!/bin/sh
monitor_path="./"
run_name_monitor="monitor.sh"
run_name_monitor_arm="monitor.sh"
srv_name_x64="test_x64.service"
if [ -f /etc/centos-release ];then
echo "0"
if [ -f $monitor_path$run_name_monitor ]
then
chmod 755 $monitor_path$run_name_monitor
else
echo "$monitor_path$run_name_monitor not exist"
exit 1
fi if [ -f $monitor_path$srv_name_x64 ];then
chmod 755 $monitor_path$srv_name_x64
ln -sf bash /bin/sh
else
echo "$monitor_path$srv_name_x64 not exist"
exit 2
fi cp -f $monitor_path$srv_name_x64 /usr/lib/systemd/system
killall -9 $run_name_monitor >/dev/null 2>&1
systemctl daemon-reload
systemctl enable $srv_name_x64
systemctl start $srv_name_x64
else
echo "system not support"
exit 3
fi
test_x64.service**如下:
[unit]
description=test service
[service]
type=******
pidfile=test.pid
execstart=/usr/test/monitor.sh &
execreload=killall test
execstop=killall test
[install]
wantedby=multi-user.target
下面是安裝路徑,install是軟體執行環境,loader.sh是安裝包執行指令碼,pak.sh是打包指令碼
pak.sh指令碼**如下:
#bin/bash
tar -zcvf install.tar.gz install/
cat ./loader.sh install.tar.gz > pak
rm -f install.tar.gz
loader.sh指令碼**如下:
#!/bin/sh
archive=`awk '/^__archive__below__/ ' "$0"`
tail -n+$archive "$0" | tar xzvm -c /usr
if [ $? -ne 0 ]
then
echo "faile! don't do any edit to this file"
exit
ficd /usr/install
chmod 777 /usr/install/*
./install.sh
exit 0
#this line must be the last line of the file
__archive__below__
下面我們測試下軟體打包的使用
1、首先執行 ./pak.sh
2、觀察到生成pak安裝包
3、執行pak安裝包 ./pak
4、安裝完成,觀察到/usr目錄下已經有install軟體資料夾
5、觀察程序可以看到***程序和test程式程序已經啟動
shell指令碼一鍵安裝zabbix
bin bash zabbix 一鍵部署指令碼 echo 正在配置firewall防火牆 systemctl stop firewalld dev null systemctl disable firewalld dev null if eq 0 then echo firewall防火牆初始化完畢...
shell指令碼一鍵安裝lnmp
bin bash 安裝nginx依賴 yum y install gcc gcc c pcre devel zlib devel openssl devel 解壓nginx安裝包 tar zxf nginx 1.12.2.tar.gz cd nginx 1.12.2 編譯安裝 configure m...
一鍵安裝Harbor倉庫(shell指令碼)
請安裝前修改正確的hostname 或者自己更換的埠 bin bash 網域名稱設定 hostname 192.168.56.24 埠port 80 禁止使用者註冊 self registration off 設定只有管理員可以建立專案 project creation restriction ad...