linux下jar启停脚本分享

linux下jar启停脚本分享

  • 每次运行脚本都回将启停记录日志保存到脚本目录下的restart.log,方便查看是否重启成功
  • 执行脚本前奖要启动的jar包放到脚本同目录,改名为app.jar,也可以自行修改名称

启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash

# 日志文件路径
LOG_FILE="restart.log"

echo "$(date '+%Y-%m-%d %H:%M:%S') - Starting service" >> $LOG_FILE

nohup java -jar /home/scapp/imes-pm/app.jar -Xms1024m -Xmx1024m -XX:MaxPermSize=512m > /dev/null 2>&1 &

if [ $? -eq 0 ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') - service started successfully" >> $LOG_FILE
else
echo "$(date '+%Y-%m-%d %H:%M:%S') - Failed to start service" >> $LOG_FILE
fi

停止

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash

# 日志文件路径
LOG_FILE="restart.log"

echo "$(date '+%Y-%m-%d %H:%M:%S') - Stopping service" >> $LOG_FILE

PID=$(ps ax | grep java | grep service | awk '{print $1}')

if [ -z "$PID" ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') - No service process found" >> $LOG_FILE
else
kill -9 $PID
if [ $? -eq 0 ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') - service stopped successfully, PID: $PID" >> $LOG_FILE
else
echo "$(date '+%Y-%m-%d %H:%M:%S') - Failed to stop service, PID: $PID" >> $LOG_FILE
fi
fi

重启

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/bash

# 日志文件路径
LOG_FILE="restart.log"

echo "$(date '+%Y-%m-%d %H:%M:%S') - Restarting service" >> $LOG_FILE

# 查找 service 进程ID
PID=$(ps ax | grep java | grep service | awk '{print $1}')

# 如果进程存在,先停止它
if [ -n "$PID" ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') - Found running service with PID: $PID. Stopping it..." >> $LOG_FILE
kill -9 $PID
if [ $? -eq 0 ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') - service stopped successfully, PID: $PID" >> $LOG_FILE
else
echo "$(date '+%Y-%m-%d %H:%M:%S') - Failed to stop service, PID: $PID" >> $LOG_FILE
fi
else
echo "$(date '+%Y-%m-%d %H:%M:%S') - No running service found" >> $LOG_FILE
fi

# 启动 service
echo "$(date '+%Y-%m-%d %H:%M:%S') - Starting service" >> $LOG_FILE

nohup java -jar /home/scapp/imes-pm/app.jar -Xms1024m -Xmx1024m -XX:MaxPermSize=512m > /dev/null 2>&1 &

if [ $? -eq 0 ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') - service started successfully" >> $LOG_FILE
else
echo "$(date '+%Y-%m-%d %H:%M:%S') - Failed to start service" >> $LOG_FILE
fi

问题

  1. 执行时如果报如下错误
  • -bash: ./restart.sh: /bin/bash^M: bad interpreter: No such file or directory

这个错误通常是由于Windows使用\r\n表示换行,而Unix/Linux使用\n。这个额外的\r字符会导致解释器无法正确识别脚本文件的起始。

1
2
# 执行如下命令替换对应字符即可执行成功
sed -i 's/\r$//' restart.sh