最终结果
在 /root 目录下新建启动脚本 boot.sh
# 启动 redis
redis-server /usr/local/soft/redis/redis.conf
# nginx
nginx
# 启动 Elasticsearch
# 启动脚本 /etc/init.d/es
# 启动java程序
check_elasticsearch_boot_success(){
result=$(curl http://localhost:9200 | grep "cluster_name" )
while [ "$result" == "" ]
do
echo "result: ${result} not running..."
sleep 3s
result=$(curl http://localhost:9200 | grep "cluster_name" )
done
}
check_elasticsearch_boot_success
source /etc/profile.d/java.sh
cd /home/source/api
nohup java -Xmx256m -Xms128m -Xss256k -jar hhw-admin.jar --spring.profiles.active=test > logs/admin.log 2>&1 &
nohup java -Xmx256m -Xms128m -Xss256k -jar hhw-api.jar --spring.profiles.active=test > logs/api.log 2>&1 &
添加执行权限 chmod +x boot.sh
编辑 /etc/rc.d/rc.local ,在结尾处输入 sh /root/boot.sh &
给 /etc/rc.d/rc.local 添加执行权限 chmod +x /etc/rc.d/rc.local
然后 reboot 测试效果
心路历程
在 /root 目录下新建启动脚本 boot.sh
# 启动 redis
redis-server /usr/local/soft/redis/redis.conf
# nginx
nginx
# 启动 Elasticsearch
# 启动脚本 /etc/init.d/es
# 启动java程序
source /etc/profile.d/java.sh
cd /home/source/api
nohup java -Xmx256m -Xms128m -Xss256k -jar hhw-admin.jar --spring.profiles.active=test > logs/admin.log 2>&1 &
nohup java -Xmx256m -Xms128m -Xss256k -jar hhw-api.jar --spring.profiles.active=test > logs/api.log 2>&1 &
添加执行权限 chmod +x boot.sh
编辑 /etc/rc.d/rc.local ,在结尾处输入 sh /root/boot.sh &
给 /etc/rc.d/rc.local 添加执行权限 chmod +x /etc/rc.d/rc.local
然后 reboot 测试效果
效果不理想,并未启动成功,原因是我的java程序里使用了 Elasticsearch ,Elasticsearch 启动不成功的话,我的程序也会失败
于是 我想着启动java程序前,延时一会儿,等Elasticsearch启动了,再启动java程序
于是 脚本变成了这样
# 启动 redis
redis-server /usr/local/soft/redis/redis.conf
# nginx
nginx
# 启动 Elasticsearch
# 启动脚本 /etc/init.d/es
# 启动java程序
# 休眠1分钟
sleep 3s
source /etc/profile.d/java.sh
cd /home/source/api
nohup java -Xmx256m -Xms128m -Xss256k -jar hhw-admin.jar --spring.profiles.active=test > logs/admin.log 2>&1 &
nohup java -Xmx256m -Xms128m -Xss256k -jar hhw-api.jar --spring.profiles.active=test > logs/api.log 2>&1 &
reboot 再次测试
结果发现成功了一个,另一个失败了。于是我又改成写个循环,使用 [ $(ps -aux | grep elasticsearch | wc -l) -le 1 ] 判断Elasticsearch是否启动成功,不成功就休眠3秒;直到Elasticsearch启动成功。
代码变成了这样:
# 启动 redis
redis-server /usr/local/soft/redis/redis.conf
# nginx
nginx
# 启动 Elasticsearch
# 启动脚本 /etc/init.d/es
# 启动java程序
while [ $(ps -aux | grep elasticsearch | wc -l) -le 1 ]
do
echo -e "检测一次,未启动"
# 如果Elasticsearch还未启动,休眠3秒再重新检测是否启动
sleep 3s
done
source /etc/profile.d/java.sh
cd /home/source/api
nohup java -Xmx256m -Xms128m -Xss256k -jar hhw-admin.jar --spring.profiles.active=test > logs/admin.log 2>&1 &
nohup java -Xmx256m -Xms128m -Xss256k -jar hhw-api.jar --spring.profiles.active=test > logs/api.log 2>&1 &
reboot 再次尝试
成功了,🎉✨✨
本着负责人的态度,第二天,我又reboot 测试了一下,哦豁,又有一个程序启动失败了。打开日志一看,还是同样的问题,Elasticsearch未启动成功。
我就想 ps -aux | grep elasticsearch | wc -l 是通过判断输出的条数大于 1 来决定是否启动的,二Elasticsearch启动是比较慢的,有没有可能Elasticsearch还在启动的过程中,ps -aux | grep elasticsearch | wc -l 返回的条数就大于1了呢?
验证之后,果然是这样。
然后改成判断 curl http://localhost:9200 的返回结果来判断是否启动成功
# 启动 redis
redis-server /usr/local/soft/redis/redis.conf
# nginx
nginx
# 启动 Elasticsearch
# 启动脚本 /etc/init.d/es
# 启动java程序
check_elasticsearch_boot_success(){
result=$(curl http://localhost:9200 | grep "cluster_name" )
while [ "$result" == "" ]
do
echo "result: ${result} not running..."
sleep 3s
result=$(curl http://localhost:9200 | grep "cluster_name" )
done
}
check_elasticsearch_boot_success
source /etc/profile.d/java.sh
cd /home/source/api
nohup java -Xmx256m -Xms128m -Xss256k -jar hhw-admin.jar --spring.profiles.active=test > logs/admin.log 2>&1 &
nohup java -Xmx256m -Xms128m -Xss256k -jar hhw-api.jar --spring.profiles.active=test > logs/api.log 2>&1 &
这回总可以了吧 等待时间验证