启动脚本可放在bin目录下,修改/etc/rc.local 在exit前添加,例:exec /home/myApp/run.sh
启动时先等待当前网络初始化完毕,也就是获取当前IP成功之后再启动应用,带日志自动清除功能,带超时功能。
#!/bin/bash
###############start run shell###############
set_ip="192.168.1.147" #设备IP
basepath=$(cd `dirname $0`; pwd) #当前路径
app_name=$basepath"/my_app " #应用程序名称
log_files_max=10 #保留日志文件数量
log_files_path=$basepath"/log/" #存储日志文件路径
timeout=120 #120s超时
current_date_day=$(date +%Y-%m-%d)
current_date_all=`date "+%Y-%m-%d %H:%M:%S"`
function start_app()
{ #启动app
files=$(ls $log_files_path) #log目录下文件
ps -fe|grep $app_name|grep -v grep
if [ $? -ne 0 ]
then
log_file=$log_files_path"${current_date_day}.log"
echo "start run server "${current_date_all} >> $log_file
nohup $app_name >> $log_file 2>&1 &
return 0
else
echo "The server run successed!"
return 1
fi
}
function check_log_files(){ #检查日志文件数量
files=$(ls -tr $log_files_path) #log目录下文件
count=$(ls $log_files_path -l |grep "^-"|wc -l)
if [ $count -gt $log_files_max ]
then
for file in $files
do
rm -fr $log_files_path$file
break
done
fi
}
function check_net_ready(){ #检查网络是否准备好
delay_time=1
while true
do
local_ip=$(/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:")
if [ $local_ip == $set_ip ]
then
return 1
else
sleep 1
delay_time+=1
fi
if [ $delay_time -gt $timeout] #超时
then
return 0
fi
done
}
#########main###########
if [ ! -d $log_files_path ] #判断日志文件夹是否存在
then
mkdir -m 777 $log_files_path
fi
check_net_ready
if [ $? == 1 ]
then
for i in {1,2,3,4}
do
start_app
if [ $? -ne 0 ]
then
break
fi
done
fi
check_log_files
###############end###############