Linux——开机启动和后台运行
rehoni / 2022-09-21
执行脚本
流程:后台运行脚本调用自启动脚本,判断执行脚本是否正在运行,调用执行脚本。
创建xxxx.sh
脚本包装java -jar
命令的执行
cd /users/ems/Jar/imp
java -jar -Xms1024m -Xmx1536m -XX:PermSize=512m -XX:MaxPermSize=2048m imp.jar -propath imp.properties > /users/ems/Jar/logs/imp-logs.txt
# -vmargs 说明后面是VM的参数,所以后面的其实都是JVM的参数了
# -Xms128m JVM初始分配的堆内存
# -Xmx512m JVM最大允许分配的堆内存,按需分配
# -XX:PermSize=64M JVM初始分配的非堆内存
# -XX:MaxPermSize=128M JVM最大允许分配的非堆内存,按需分配
自启脚本
start_ratio(){
sh /users/ems/Jar/bin/ratio.sh &
sleep 120
}
stop_ratio(){
PROCESS=`ps -ef |grep ratio.jar|grep -v grep|grep -v PPID|awk '{ print $2}'`
for i in $PROCESS
do
echo ">>>RatioExec is running!begin to shutdown..."
echo "Kill the process [ $i ]"
kill -9 $i
done
}
restart_ratio(){
stop_ratio
start_ratio
}
COUNT=$(ps -ef |grep ratio.jar |grep -v "grep" |wc -l)
while true;do
if [ $COUNT -eq 0 ]; then
echo ">>>Ratio is not ok!begin to restart ratio..."
echo "count:"$COUNT
restart_ratio
elif [ $COUNT -gt 1 ]; then
echo ">>>Ratio is running so many!begin to kill all and restart ratio..."
echo "count:"$COUNT
restart_ratio
else
echo ">>>Only 1 ratio is running!"
fi
sleep 60
done
通过COUNT线程数量来判断是否有多个java进行在执行,来决定是否清除多余的java进程。
sleep是用来间歇性地判断程序是否有执行完,判断周期,让程序跑一会儿。
考虑到有些程序可以通过判断http的响应,执行程序的运行和停止。
get_http_status()
{
http_code=`curl --head -o /dev/null --silent --max-time 20 --connect-timeout 20 -w %{http_code} $1`
return $http_code
}
#########Start Zuul && Eureka##########################
zuulUrl="<http://localhost:8001/info>"
eurekaUrl="<http://localhost:8000/info>"
############check NrCloud#############################
while true; do
#check and restart eureka
get_http_status $eurekaUrl
status=$?
if [ $status -eq 200 ]; then
echo ">>>Eureka is ok!"
else
echo ">>>Eureka is not ok!begin to restart Eureka..."
echo "http_status:"$status
restart_eureka
fi
#check and restart zuul
get_http_status $zuulUrl
status=$?
if [ $status -eq 200 ]; then
echo ">>>Zuul is ok!"
else
echo ">>>Zuul is not ok!begin to restart Zuul..."
echo "http_status:"$status
restart_zuul
fi
sleep 30
done
后台运行脚本
创建后台运行脚本java_exec.csh
来包装自启脚本
#!/bin/csh
nohup /users/ems/Jar/bin/self_restart_ratio.sh &
nohup
配合&
命令,能够实现后台一直运行该程序/脚本。可以通过ps -ef | grep 关键字
来确认该脚本是否正在运行。上边的执行脚本也是。
自定义开机程序
编辑文件 /etc/rc.local
修改 /etc/rc.d/rc.loacl (/etc/rc.local)文件,在文件末尾(exit 0之前)加上你开机需要启动的程序或执行的命令即可(执行的程序需要写绝对路径,添加到系统环境变量的除外)
通过chkconfig命令设置
将启动文件cp到 -或者/etc/rc.d/init.d/(前者是后者的软连接)下
vim 启动文件,文件前面务必添加如下三行代码,否侧会提示chkconfig不支持
#!/bin/sh 告诉系统使用的shell,所以的shell脚本都是这样
#chkconfig: 35 20 80 分别代表运行级别,启动优先权,关闭优先权,此行代码必须
#description: http server(自己随便发挥)//两行都注释掉!!!,此行代码必须
chkconfig –add 脚本文件名 操作后就已经添加了
注意
如果在服务器中执行的时候,提示权限不足
chmod 777 ./imp.sh