注意:全部在root权限下进行操作,如果是普通用户,sudo su切换到root用户下操作;
1、上传脚本到服务器:jar相同目录下fault-logic-service.sh
#!/bin/bash
#注意:运行环境变化时请注意修改jdk的环境变量
export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre1.8.0_321
export CLASSPATH=$JRE_HOME/lib/rt.jar:$JRE_HOME/lib/ext
export PATH=$PATH:$JRE_HOME/bin
AppName=result-logic-processor.jar
#JVM参数
JVM_OPTS="-Dname=$AppName -Duser.timezone=Asia/Shanghai -Xms512M -Xmx512M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=512M -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=8889"
APP_HOME=/home/htkj/FAULT-LOGIC
LOG_PATH=$APP_HOME/logs
BIN_PATH=$APP_HOME/bin
if [ "$1" = "" ];
then
echo -e "\033[0;31m 未输入操作名 \033[0m \033[0;34m {start|stop|restart|status} \033[0m"
exit 1
fi
if [ "$AppName" = "" ];
then
echo -e "\033[0;31m 未输入应用名 \033[0m"
exit 1
fi
function start()
{
echo "Start $AppName"
PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
if [ x"$PID" != x"" ]; then
echo "$AppName is running..."
else
nohup java -jar $JVM_OPTS $BIN_PATH/$AppName > $LOG_PATH/nohup.out
echo "Start $AppName success..."
fi
}
function stop()
{
echo "Stop $AppName"
PID=""
query(){
PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
}
query
if [ x"$PID" != x"" ]; then
kill -TERM $PID
echo "$AppName (pid:$PID) exiting..."
while [ x"$PID" != x"" ]
do
sleep 1
query
done
echo "$AppName exited."
else
echo "$AppName already stopped."
fi
}
function restart()
{
stop
sleep 2
start
}
function status()
{
PID=`ps -ef |grep java|grep $AppName|grep -v grep|wc -l`
if [ $PID != 0 ];then
echo "$AppName is running..."
else
echo "$AppName is not running..."
fi
}
case $1 in
start)
start;;
stop)
stop;;
restart)
restart;;
status)
status;;
*)
esac
2、查看服务器配置的jdk环境变量:cat /etc/profile
export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre1.8.0_321
export CLASSPATH=$JRE_HOME/lib/rt.jar:$JRE_HOME/lib/ext
export PATH=$PATH:$JRE_HOME/bin
复制到脚本中
3、将jdk的环境变量放在启动脚本fault-logic-service.sh的最上面:
4、测试启动脚本fault-logic-service.sh:查看日志,是否启动成功
sh /home/htkj/FAULT-LOGIC/bin/fault-logic-service.sh start > /home/Auto_start_test_log.txt 2>&1 &
注意事项:若报错java not find,修改启动脚本,
nohup java -jar $JVM_OPTS $BIN_PATH/$AppName > $LOG_PATH/nohup.out
---à
nohup /usr/local/java/jre1.8.0_321/bin/java -jar $JVM_OPTS $BIN_PATH/$AppName > $LOG_PATH/nohup.out 红色字体为服务器jdk实际目录,注意修改
注意:如果执行脚本报错: ault-logic-service.sh: Syntax error: "(" unexpected
处理如下:
原因:
兼容性问题,因为linux将sh默认指向了dash,而不是bash
解决:
#在root下面执行 dpkg-reconfigure dash,选择no后回车,然后执行测试脚本就可以解决问题
5、设置自启动命令
①在linux中执行命令: cd /etc/
②修改rc.local
执行命令:vi rc.local
然后按下键盘上的【i】键进入修改模式
接着在代码尾部添加代码:
cd 脚本目录
sh 脚本目录/fault-logic-service.sh start > 日志目录/Auto_start_log.txt 2>&1 &
#第一句为进入你项目所在的目录,我这里把项目放的目录
#第二句执行该目录下的sh文件
##说明
如果不提前进入所在目录,直接执行第二句,也会开机自启动,但是日志文件会在根目录下的log文件中。只有先进入,再执行,项目的日志文件才会在test文件夹下
##bin文件中有jar包、fault-logic-service.sh、以及jar包的日志文件logs
然后先按下【esc】键,再按下【:】键,在光标闪烁处输入:wq。按回车,完成修改
③、设置执行权限。
输入命令:chmod +x /etc/rc.local
chmod +x 脚本目录/fault-logic-service.sh
或者:chmod 755 脚本目录/fault-logic-service.sh
chmod +x /etc/rc.local
④、在linux中输入命令 :reboot 重启服务器
⑤、重启后,输入: ps -ef|grep java查看jar包是否启动
6、注意事项:rc.local 中添加日志记录,查看重启时是否执行
echo "执行任务开始"> /home/successLog.txt
7、查看jar的权限,如果不可执行,chmod 777 XXX.jar