欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux定义脚本自启服务历程

程序员文章站 2022-04-10 14:49:32
...

Linux定义脚本自启服务历程

全部脚本内容

#!/bin/sh
# chkconfig:2345 60 30
# description:te
export JAVA_HOME=/home/java/jdk1.8.0_211/
export PATH=$JAVA_HOME/bin:$PATH
su - testShell -c 'nohup java -jar /home/csdn/csdnDownload-0.0.1-SNAPSHOT.jar --server.port=18080 &'
rm -rf /home/start.log
echo "##############$(date +%Y-%m-%d\ %H:%M:%S)###############: csdn web服务启动情况" >> /home/start.log
sleep 60;
echo "##############$(date +%Y-%m-%d\ %H:%M:%S)###############: csdn web服务启动情况" >> /home/start.log
echo "##############$(date +%Y-%m-%d\ %H:%M:%S)###############: netstat -tunlp|grep 18080" >> /home/start.log
echo "`netstat -tunlp|grep 18080`" >> /home/start.log

启动服务

#!/bin/sh
# chkconfig:2345 60 30
# description:te
export JAVA_HOME=/home/java/jdk1.8.0_211/
export PATH=$JAVA_HOME/bin:$PATH
cd /home/csdn
nohup java -jar csdnDownload-0.0.1-SNAPSHOT.jar --server.port=18080 &

首先进入对应jar包所在目录,运行相关命令,但是发现脚本无法识别java,所以手动增加了JAVA_HOMEPATH。成功运行。

增加日志

为了防止有部分服务启动失败,却无法得知,所以增加日志文件。通过查看端口是否被占用判断是否正常运行。
所以增加命令echo "##############$(date +%Y-%m-%d\ %H:%M:%S)###############: csdn web服务启动情况" > /home/start.log
但是每次都有一行文字,且tail -f /home/start.log会有tail: /home/start.log: file truncated这种报错,百度后发现echo命令后面的>一个是覆盖,相当于删除后在写入。两个则是才是追加。
又因为服务启动需要时间,防止出现服务正在启动,而日志已经写入,加入沉睡时间。

#!/bin/sh
# chkconfig:2345 60 30
# description:te
export JAVA_HOME=/home/java/jdk1.8.0_211/
export PATH=$JAVA_HOME/bin:$PATH
nohup java -jar /home/csdn/csdnDownload-0.0.1-SNAPSHOT.jar --server.port=18080 &
rm -rf /home/start.log
echo "##############$(date +%Y-%m-%d\ %H:%M:%S)###############: csdn web服务启动情况" >> /home/start.log
sleep 60;
echo "##############$(date +%Y-%m-%d\ %H:%M:%S)###############: csdn web服务启动情况" >> /home/start.log
echo "##############$(date +%Y-%m-%d\ %H:%M:%S)###############: netstat -tunlp|grep 18080" >> /home/start.log
echo "`netstat -tunlp|grep 18080`" >> /home/start.log

切换别的用户运行命令

有的时候服务需要使用特定的用户启动,那么这个时候则需要切换用户运行。加入su命令。
su - 用户名 -c '命令内容',注意-用户名之间一定要有空格。
如果切换用户时需要输入密码,则需要使用expect命令。expect命令详解
最终命令如下:

#!/bin/sh
# chkconfig:2345 60 30
# description:te
export JAVA_HOME=/home/java/jdk1.8.0_211/
export PATH=$JAVA_HOME/bin:$PATH
su - testShell -c 'nohup java -jar /home/csdn/csdnDownload-0.0.1-SNAPSHOT.jar --server.port=18080 &'
rm -rf /home/start.log
echo "##############$(date +%Y-%m-%d\ %H:%M:%S)###############: csdn web服务启动情况" >> /home/start.log
sleep 60;
echo "##############$(date +%Y-%m-%d\ %H:%M:%S)###############: csdn web服务启动情况" >> /home/start.log
echo "##############$(date +%Y-%m-%d\ %H:%M:%S)###############: netstat -tunlp|grep 18080" >> /home/start.log
echo "`netstat -tunlp|grep 18080`" >> /home/start.log