问题
之前参考网上说的直接在/etc/rc.local文件中增加sh文件启动语句,但是没有效果:
/root/dashboard/dashboard_backend/start_dashboard.sh
权限也增加了,还是不行:
chmod +x /etc/rc.local
排查
排查了一下:
查看系统日志/var/log/root.log,发现rc.local执行了。所以但是执行情况不在这。所以去另一个文件中查看“/var/log/messages”,发现了问题,报错说“./”不识别:
rc.local: Error: Unable to access jarfile ./*.jar
我的sh文件中的语句:
其中最后一句 nohup 时候使用的是“java -jar ./*.jar”,所以识别成了rc.local所在目录,而不是start_dashboard.sh文件所在目录。
#!/bin/bash
pid=`ps aux|grep java | grep -E dashboard_backend.* |grep -v grep|awk '{print $2}'`
kill -9 $pid
# java -jar ./dashboard_backend-0.0.1-SNAPSHOT-plus.jar --spring.profiles.active=prod > ./nohup.log &
nohup java -jar ./*.jar --spring.profiles.active=prod &
解决
所以,采用的方法是先cd进入到目标sh文件所在目录,然后再执行sh文件。rc.local文件中增加如下语句:
cd /root/dashboard/dashboard_backend && ./start_dashboard.sh
完整解决方案
1. 赋执行权限:/etc/rc.local
chmod +x /etc/rc.local
2.编辑 /etc/rc.local:
#开机启动nginx
/usr/local/nginx/sbin/nginx
# 因为reboot自启动rc.local执行在环境变量加载之前,所以需要在这里先指定java路径,再启动jar,否则报错“找不到java”
JAVA_HOME=/usr/local/java/jdk1.8.0_271
PATH=/usr/local/nginx/sbin:$JAVA_HOME/bin/:/usr/local/bin:$PATH
#PATH=/usr/local/nginx/sbin:$JAVA_HOME/bin/:$PATH
export JAVA_HOME PATH
# 这里需要进入文件夹所在目录,否则sh文件中的“./”路径识别错误
# /root/dashboard/dashboard_backend/start_dashboard.sh
cd /root/dashboard/dashboard_backend && ./start_dashboard.sh
3.重启
reboot
4.查看
jps