注意注意注意注意注意:用户: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