Linux配置Java多服务开机启动脚本(包含前置远程MySQL和NACOS)

因为公司内部原因导致服务器经常关机开机,每次重启就需要手动启动大量服务,所以决定将所有服务都配置到开机启动里面
正常的Java项目一般都会依赖MySQL和NACOS等服务,所以在配置开机启动的时候我们首先要考虑的是服务需不需要等待nacos等服务启动后再启动,否则Java服务也无法正常启动
这里不教怎么配置MySQL和NACOS开机启动服务,直接教大家配置Java服务的脚本

首先我的Java服务jar包都放在服务器/usr/local/webapp/下了
我们先在这个目录下新建一个文件夹用来存放脚本

mkdir sh_folder

然后我们在sh_folder里面给order服务创建一个脚本

touch start_order.sh

脚本内容如下
pkill -f 是用来关闭之前的进程的,如果只是为了开机启动这个可以不要,但是我这里为了平时重启服务要用就留着了
大家也可以换成自己的启动命令

pkill -f 'java -jar -Dspring.profiles.active=test /usr/local/webapp/order-service-1.0-SNAPSHOT.jar'
sleep 5
cd /usr/local/webapp/
nohup java -jar -Dspring.profiles.active=test /usr/local/webapp/order-service-1.0-SNAPSHOT.jar > ./log/order-service.log 2>&1 &

我们再给pay服务创建一个脚本

touch start_pay.sh

脚本内容如下,可以看到命令都一样,就是换了一下jar包和日志文件

pkill -f 'java -jar -Dspring.profiles.active=test /usr/local/webapp/pay-service-1.0-SNAPSHOT.jar'
sleep 5
cd /usr/local/webapp/
nohup java -jar -Dspring.profiles.active=test /usr/local/webapp/pay-service-1.0-SNAPSHOT.jar > ./log/pay-service.log 2>&1 &

这里就只写这两个服务,要是有其它服务大家按照上面的流程加就可以了
下面为了一次启动多个服务我们还需要加个脚本

touch start_all.sh

脚本内容如下
主要要注意的就是里面的MySQL和NACOS服务ip和端口,大家换成自己的
还有一个很重要的问题就是如果一台服务器上服务很多建议启动一个等一段时间,因为多个服务同时启动会瞬间耗尽服务器内存导致服务启动失败等问题,所以我在里面加了sleep5,这个根据平时启动项目时间大家适当调整就可以了
多个服务的大家继续往里面加即可

#!/bin/bash

# 远程 MySQL 服务器的相关信息
REMOTE_MYSQL_HOST="192.168.2.102"
REMOTE_MYSQL_PORT="3306"

# 等待远程 MySQL 服务就绪的函数
wait_for_mysql() {
    until nc -zv -w 2 $REMOTE_MYSQL_HOST $REMOTE_MYSQL_PORT; do
        echo "Waiting for MySQL to start..."
        sleep 5
    done
    echo "MySQL is ready!"
}

# 调用等待函数
wait_for_mysql

# 远程 NACOS 服务器的相关信息
REMOTE_NACOS_HOST="192.168.2.104"
REMOTE_NACOS_PORT="9000"

# 等待远程 NACOS 服务就绪的函数
wait_for_nacos() {
    until nc -zv -w 2 $REMOTE_NACOS_HOST $REMOTE_NACOS_PORT; do
        echo "Waiting for NACOS to start..."
        sleep 5
    done
    echo "NACOS is ready!"
}

# 调用等待函数
wait_for_nacos

# 启动第一个脚本
/usr/local/webapp/sh_folder/start_order.sh

# 在第一个脚本启动后等待一段时间(例如,等待5秒)
sleep 5

# 启动第二个脚本
/usr/local/webapp/sh_folder/start_pay.sh

这三个脚本创建好后还有一件事不要忘了,就是给它们加权限,不然后面自启的时候会提示文件找不到或者权限不足什么的

chmod 754 /usr/local/webapp/sh_folder/start_order.sh

chmod 754 /usr/local/webapp/sh_folder/start_pay.sh

chmod 754 /usr/local/webapp/sh_folder/start_all.sh

上面这些脚本只是用来启动项目的,大家平时重启服务什么的也可以用
接下来才是配置开机启动
我们进到下面这个目录

cd /lib/systemd/system

创建一个开机启动服务,注意文件名一定要是.service结尾,不然后面会报错

touch java_all.service

把下面内容放进去,复制的时候看下是不是完整的,[Unit]这个复制的时候经常有问题

[Unit]

Description=java_all_service
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/webapp/sh_folder/start_all.sh
PrivateTmp=true

[Install]
WantedBy=multi-user.target

保存后一样的要给这个文件加权限等,直接执行下面命令

chmod 754 /lib/systemd/system/java_all.service

systemctl daemon-reload

systemctl enable java_all.service

# 最后看下状态是否正常
systemctl status java_all.service

差点忘了,脚本里面用到nc命令,大家可以先试下有没有,没有的话用下面命令装一下

# 测试是否可以连接到MySQL服务
nc -zv -w 2 192.168.2.102 3306

# 如果提示命令不存在就安装一下
yum install nc -y

这样就完成了

你可能感兴趣的:(linux,java,mysql)