springcloud项目部署到Linux多服务启动脚本和开机自启

 多服务启动

  1. 脚本 java.sh
  2. export修改成自己的项目路径和项目别名
  3. 端口号跟每个微服务的端口号一样,跟yml配置的一样
  4. 修改脚本中$符号的脚本变量,跟export的一样
  5. 因为项目写的是全路径,例:/opt/apps/zrzy/okayx/okayx-register/okayx-register.jar
  6. 所以放在linux的任何地方都可以执行。
  7. 启动项目:./java.sh start
  8. 停止项目:./java.sh stop
  9. 重启项目:./java.sh restart
  10. java.sh如下:
#!/bin/sh
# chkconfig: 2345 10 90  
# description: Start and Stop redis 
export REGISTER=/opt/apps/zrzy/okayx/okayx-register/okayx-register.jar
export ADMIN=/opt/apps/zrzy/okayx/okayx-xxl/okayx-upms-biz.jar
export AUTH=/opt/apps/zrzy/okayx/okayx-auth/okayx-auth.jar
export GATEWAY=/opt/apps/zrzy/okayx/okayx-gateway/okayx-gateway.jar
export MONITOR=/opt/apps/zrzy/okayx/okayx-monitor/okayx-monitor.jar
export CLOUDMANAGER=/opt/apps/zrzy/okayx/okayx-natural-cloud/okayx-natural-cloud-manager-biz.jar
export RESOURCES=/opt/apps/zrzy/okayx/okayx-natural-resources-biz/okayx-natural-resources-biz.jar
export SENTINEL=/opt/apps/zrzy/okayx/okayx-sentinel/okayx-sentinel-dashboard.jar
export XXLJOB=/opt/apps/zrzy/okayx/okayx-xxl-job/okayx-xxl-job-admin.jar
export CODEGEN=/opt/apps/zrzy/okayx/okayx-codegen/okayx-codegen.jar
export PLATFORM=/opt/apps/zrzy/okayx/okayx-bi-platform/okayx-bi-platform.jar
export GISSUPPORT=/opt/apps/zrzy/okayx/okayx-natural-gis-support/okayx-natural-gis-support-biz.jar

export REGISTER_port=8848
export ADMIN_port=4000
export AUTH_port=3000
export GATEWAY_port=9999
export MONITOR_port=5001
export CLOUDMANAGER_port=6061
export RESOURCES_port=6060
export SENTINEL_port=5020
export XXLJOB_port=9080
export CODEGEN_port=5003
export PLATFORM_port=5006
export GISSUPPORT_port=6062
 
case "$1" in
 
start)
        ## 启动REGISTER
        echo "--------REGISTER 开始启动--------------"
        nohup java -jar $REGISTER >/dev/null 2>&1 &
        REGISTER_pid=`lsof -i:$REGISTER_port|grep "LISTEN"|awk '{print $2}'`
        until [ -n "$REGISTER_pid" ]
            do
              REGISTER_pid=`lsof -i:$REGISTER_port|grep "LISTEN"|awk '{print $2}'`  
            done
        echo "REGISTER pid is $REGISTER_pid" 
        echo "--------REGISTER 启动成功--------------"
 
    
<think>我们讨论的是如何在Linux系统中配置Spring Cloud服务随系统启动。根据引用内容,Spring Cloud项目由多个微服务组成(如Nacos、Seata、Gateway等),每个服务通常打包为独立的JAR文件运行。配置开机的核心是将这些JAR文件封装为系统服务(如systemd服务),并设置依赖关系确保启动顺序。 引用[2]提到了服务的启动顺序,例如:先启动MySQL、Redis、Nginx,然后是Nacos服务,接着是各个微服务(如center-data-seata.jar, center-gateway.jar等)。引用[4]详细介绍了两种方法:1) 通过shell脚本启动JAR并配置日志输出;2) 将脚本封装为systemd服务并设置自。 因此,配置Spring Cloud服务自的步骤如下: ### 一、创建启动脚本(每个微服务一个脚本) 以`center-gateway.jar`为例: 1. 在项目部署目录(如`/njcdv/center-gateway/`)下创建启动脚本`center-gateway.sh`: ```bash #!/bin/bash # 可指定环境变量(如JDK路径,非必须) # export JAVA_HOME=/usr/local/jdk1.8.0_371 # export PATH=$PATH:$JAVA_HOME/bin # 启动命令(使用绝对路径) nohup java -jar -Dspring.config.location=/njcdv/center-gateway/application.yml /njcdv/center-gateway/center-gateway.jar > /njcdv/center-gateway/logs/center-gateway.log 2>&1 & ``` 2. 赋予执行权限: ```bash chmod +x /njcdv/center-gateway/center-gateway.sh ``` ### 二、封装为systemd服务(推荐) 1. 创建service文件(如`/usr/lib/systemd/system/center-gateway.service`): ```ini [Unit] Description=Center Gateway Service After=mysql.service redis.service nginx.service nacos.service # 依赖服务[^2][^4] [Service] Type=forking # 因为使用nohup后台启动,所以用forking User=root Group=root # 启动脚本路径 ExecStart=/bin/bash /njcdv/center-gateway/center-gateway.sh # 重配置(可选) Restart=on-failure RestartSec=10s [Install] WantedBy=multi-user.target # 多用户命令行模式 ``` 2. 重载systemd配置并用自: ```bash sudo systemctl daemon-reload sudo systemctl enable center-gateway.service ``` ### 三、处理服务依赖 由于微服务启动有顺序要求(如Nacos必须先于其他服务启动),需通过`After``Requires`设置依赖: - **Nacos服务示例**(假设已封装为`nacos.service`): ```ini [Unit] Description=Nacos Service After=network.target mysql.service # 依赖网络MySQL [Service] ... ``` ### 四、启动与验证 ```bash # 启动单个服务 sudo systemctl start center-gateway # 查看状态 systemctl status center-gateway # 检查自是否用 systemctl is-enabled center-gateway ``` ### 注意事项 1. **日志管理**:脚本中重定向日志到文件便于排查(如`> /path/to/log 2>&1`)[^4]。 2. **配置分离**:Spring Cloud应用通常从Nacos获取配置,但初始连接参数仍需在`application.yml`中指定(如Nacos地址)[^1]。 3. **资源限制**:可在`[Service]`部分添加`LimitNOFILE=65536`等限制系统资源。 §§相关问题§§ 1. 如何确保Spring Cloud微服务之间的启动顺序? 2. Spring Cloud Config如何实现配置的动态刷新[^1]? 3. 使用systemd管理Java服务时,如何配置内存限制垃圾回收参数? 4. 当微服务数量较多时,是否有更高效的管理方式(如Docker Compose)[^3]? </think>在Linux系统中配置Spring Cloud服务随系统启动,主要通过**systemd服务管理**实现。以下是具体操作步骤(以Nacos服务为例,其他Spring Cloud服务配置方法类似): --- ### 一、创建启动脚本 1. **编写启动脚本**(如 `nacos.sh`) ```bash #!/bin/bash # JDK环境变量(若全局已配置可省略) export JAVA_HOME=/usr/local/jdk1.8.0_371 export PATH=$PATH:$JAVA_HOME/bin # 启动命令(带配置文件路径) nohup java -jar -Dspring.config.location=/opt/nacos/conf/application.properties /opt/nacos/nacos-server.jar >/opt/nacos/logs/nacos.log 2>&1 & ``` > 📌 关键点: > - `-Dspring.config.location` 指定配置文件(如Nacos的`application.properties`)[^4] > - `>/path/to/log` 重定向日志输出 > - `2>&1` 合并标准错误到标准输出 > - `&` 后台运行 2. **赋予执行权限** ```bash chmod +x /opt/nacos/nacos.sh ``` --- ### 二、配置systemd服务 1. **创建.service文件** ```bash sudo nano /usr/lib/systemd/system/nacos.service ``` 内容如下: ```ini [Unit] Description=Nacos Service After=network.target mysql.service redis.service # 依赖的服务[^2] Requires=mysql.service # 强依赖MySQL [Service] Type=forking # 因用nohup后台启动 User=root WorkingDirectory=/opt/nacos ExecStart=/bin/bash /opt/nacos/nacos.sh # 启动脚本路径 ExecStop=/bin/kill -9 $MAINPID Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target ``` > 💡 **依赖关系说明**: > - `After`:定义启动顺序(先启动MySQL/Redis)[^2] > - `Requires`:必须依赖的服务(若MySQL启动失败,Nacos不会启动) 2. **重载并用服务** ```bash sudo systemctl daemon-reload sudo systemctl enable nacos.service # 设置开机 sudo systemctl start nacos # 立即启动 ``` --- ### 三、Spring Cloud服务启动顺序控制 1. **典型启动顺序**(参考微服务架构)[^2]: ```mermaid graph LR A[MySQL] --> B[Redis] B --> C[Nginx] C --> D[Nacos Config] D --> E[Seata] E --> F[System Service] F --> G[Gateway] ``` 2. **依赖配置技巧**: - 在`gateway.service`中声明: ```ini [Unit] After=nacos.service seata.service Requires=nacos.service ``` --- ### 四、验证与调试 1. **检查服务状态** ```bash systemctl status nacos.service # 查看运行状态 journalctl -u nacos.service -b # 查看本次启动日志 ``` 2. **动态刷新配置**(无需重)[^1] 对已连接Spring Cloud Config的服务发送刷新请求: ```bash curl -X POST http://service-ip:port/actuator/refresh ``` --- ### 五、生产环境建议 1. **资源限制**:在`.service`文件中添加: ```ini LimitNOFILE=65535 # 文件描述符限制 LimitMEMLOCK=infinity ``` 2. **多实例部署**: - 使用`@`符号创建模板服务(如 `nacos@1.service`, `nacos@2.service`) - 通过`%i`参数传递实例标识 3. **容器化方案**: 使用Docker Compose统一管理(参考引用[^3]): ```yaml services: nacos: image: nacos/nacos-server depends_on: - mysql - redis ``` --- ### **相关问题** 1. 如何确保Spring Cloud Config配置变更后所有微服务自动同步[^1]? 2. 使用systemd时,如何限制Java服务的堆内存大小? 3. 在生产环境中,如何实现Spring Cloud服务的优雅停机? 4. 当服务之间存在循环依赖时,如何解决systemd的启动顺序问题?
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值