1. 说明

  • 示例jar包名称为 server2.jar

  • 示例jar包所在路径 /usr/project_cs/server2

2. 关闭脚本

#!/bin/bash

# 查找server2.jar的进程ID
PID=$(ps -ef | grep 'server2.jar' | grep -v 'grep' | awk '{print $2}')

# 判断是否找到进程
if [ -z "$PID" ]; then
  echo "server2.jar进程未运行"
else
  echo "找到server2.jar进程,PID为: $PID"

  # 杀掉该进程
  kill -15 $PID

  # 检查是否成功终止
  if [ $? -eq 0 ]; then
    echo "server2.jar进程已成功终止"
  else
    echo "无法终止server2.jar进程,请检查权限或其他问题"
  fi
fi

3. 运行脚本

#!/bin/bash

# 获取当前时间,格式为 YYYYMMDDHHMMSS
CURRENT_TIME=$(date +"%Y%m%d%H%M%S")

# 切换到目标目录
cd /usr/project_cs/server2 || { echo "目录不存在,切换失败"; exit 1; }

# 检查 out.log 文件是否存在
if [ -f "out.log" ]; then
  # 将原来的 out.log 重命名为 out_YYYYMMDDHHMMSS.log
  mv out.log "out_$CURRENT_TIME.log"
  echo "out.log 已重命名为 out_$CURRENT_TIME.log"
fi

# 启动 server2.jar 并将输出写入新的 out.log
nohup java -jar server2.jar >> out.log 2>&1 &

# 打印提示信息
if [ $? -eq 0 ]; then
  echo "server2.jar 启动成功,日志写入 out.log"
else
  echo "server2.jar 启动失败"
fi

4. 异常处理

4.1 字符异常

这个错误信息通常是由于脚本文件中的换行符格式不正确引起的。Windows 和 Unix/Linux 系统的换行符格式不同,Windows 使用的是 CRLF (\r\n),而 Unix/Linux 使用的是 LF (\n)。

当你在 Windows 上编写或复制脚本,然后将其上传到 Linux 服务器时,就会出现这种错误。

[root@localhost server2]# ./stop_server2.sh
-bash: ./stop_server2.sh: /bin/bash^M: bad interpreter: No such file or directory

解决方案

使用 vim 或其他文本编辑器打开脚本文件:

vim start_server2.sh
vim stop_server2.sh

vim 中输入以下命令将文件格式转换为 Unix 格式:

:set ff=unix

保存并退出:

:wq

4.2 运行权限

chmod +x start_server2.sh
chmod +x stop_server2.sh