Linux Red Hat 通过 systemd 实现java服务sh脚本的开机启动执行

注意注意注意注意注意:用户:root

我的目录结构:

/data/iot/auth/application.jar

/data/iot/auth/restart.sh

1、在/data/iot/auth目录下创建启动脚本restart.sh,内容如下,需要将其中的JAR_FILE与LOG_FILE改为你自己的文件名称,/usr/bin/nohup为nohup指令的绝对路径(可以使用指令which nohup进行查询),/data/jdk1.8.0_431/bin/java为java的绝对路径,均要改为你自己的路径。

#!/bin/bash

# 定义服务端口和JAR文件名
PORT=8100
JAR_FILE="application.jar"
LOG_FILE="iot.log"

# 查找运行在指定端口的进程ID
PID=$(lsof -iTCP:$PORT -sTCP:LISTEN -t)

# 如果找到了进程ID,则杀掉该进程以停止服务
if [ ! -z "$PID" ]; then
    echo "Found process with PID $PID running on port $PORT. Killing it..."
    kill -9 $PID
    echo "Process killed."
    # 等待进程完全停止,可能需要更长时间,具体取决于应用
    sleep 2
fi

# 启动新的服务,并将输出重定向到日志文件
echo "Starting new instance of $JAR_FILE on port $PORT..."
/usr/bin/nohup /data/jdk1.8.0_431/bin/java -jar $JAR_FILE > $LOG_FILE 2>&1 &

# 输出成功消息到控制台
echo "Iot Service started successfully. Logs can be found in $LOG_FILE."

2、确保 restart.sh 脚本具有可执行权限,可以通过以下命令来设置:

sudo chmod +x /data/iot/auth/restart.sh

3、创建一个新的 systemd 服务单元文件来管理这个脚本,/etc/systemd/system/iot-auth.service:

[Unit]
Description=Iot Auth Service Restart Script
After=network.target

[Service]
Type=oneshot
ExecStart=/data/iot/auth/restart.sh
RemainAfterExit=true
User=root
Group=root
WorkingDirectory=/data/iot/auth
Environment="JAVA_HOME=/data/jdk1.8.0_431"
Environment="CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar"
Environment="PATH=$PATH:${JAVA_HOME}/bin"

[Install]
WantedBy=multi-user.target

解释

  • [Unit] 部分:

    • Description:提供服务的描述。
    • After=network.target:确保网络服务已经启动后再运行此服务。
  • [Service] 部分:

    • Type=oneshot:表示这是一个一次性任务,脚本执行完毕后即结束。
    • ExecStart:指定要执行的脚本路径。
    • RemainAfterExit=true:即使脚本执行完毕,服务状态仍保持为“active”。
    • User=root 和 Group=root:指定运行脚本的用户和组。可以根据需要修改为其他用户。
    • WorkingDirectory:指定脚本的工作目录。
    • Environment:设置环境变量(如 JAVA_HOME)。
  • [Install] 部分:

    • WantedBy=multi-user.target:确保服务在多用户模式下自动启动。

4、保存并关闭文件后,重新加载 systemd 配置以使新服务生效:

sudo systemctl daemon-reload

5、启动服务测试/etc/systemd/system/iot-auth.service脚本是否可用:

sudo systemctl start iot-auth.service

sudo systemctl start iot-auth.service执行成功后再执行如下指令

sudo systemctl status iot-auth.service

查看输出是什么,类似有如下字样,则说明这个脚本可以执行成功的

再去你java服务的输出日志中查看日志,是否正确输出日志。例如我的服务输出日志目录为/data/iot/auth/auth.log,查看是否可以正确输出日志。

tail -f /data/iot/auth/auth.log

第5步中的两个验证都正确,则可以向下继续进行。

6、启用服务开机启动

使用以下命令启用服务,使其在系统启动时自动运行:

sudo systemctl enable iot-auth.service

7、重启服务器验证是否生效 reboot

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值