单个脚本启动单个java服务,以及单个脚本重启多个服务

单个脚本执行单个服务

sh 复制代码
#!/bin/bash
NAME="java-demo.jar"
echo $NAME
ID=`ps -ef | grep "$NAME" | grep -v "$0" | grep -v "grep" | awk '{print $2}'`
echo $ID
echo "---------------"
for id in $ID
do
        sudo kill -9 $id
        echo "killed $id"
done
echo "---------------"
nohup java -jar /root/apps/java-demo.jar \
 --elk.enable=false \
 --elk.kafka.topic=kedi-logback \
 --elk.kafka.urls=127.0.0.1:8881 \
 --spring.profiles.active=prod \
 --spring.cloud.consul.host=127.0.0.1 \
 --spring.cloud.consul.port=8882 \
 --spring.cloud.nacos.config.server-addr=127.0.0.1:8883 \
 --spring.cloud.nacos.config.namespace=demo-prod \
 --spring.cloud.nacos.username=demo-dev \
 --spring.cloud.nacos.password=demo_passwd \
 >> demo-java.log 2>&1 &

将上述脚本保存为demo-java.sh文件,并加上可执行权限,chmod +x demo-java.sh

重启脚本,方便一次性重启多个服务

sh 复制代码
#!/bin/bash

# 定义所有应用的启动脚本路径
declare -A apps
apps=(
  ["demo"]="/root/app/run-demo.sh"
  ["log"]="/root/app/run-log.sh"
)

# 打印帮助信息
function print_help() {
  echo "Usage: $0 [all|app_name]"
  echo "  all       - 重启所有应用"
  echo "  app_name  - 重启指定的应用"
  echo "  list      - 打印支持的应用名称"
}

# 打印支持的应用名称
function list_apps() {
  echo "支持的应用名称如下:"
  for app_name in "${!apps[@]}"; do
    echo "  - $app_name"
  done
}

# 重启单个应用
function restart_app() {
  local app_name=$1
  local script_path=${apps[$app_name]}

  if [ -z "$script_path" ]; then
    echo "应用 $app_name 不存在!"
    return 1
  fi

  # 如果是 calc 应用,延迟 40 秒后再启动
  if [ "$app_name" == "calc" ]; then
    echo "检测到有依赖应用 $app_name ,等待 40 秒后再启动..."
    sleep 40  # 延迟 40 秒
  fi

  echo "正在重启应用 $app_name ..."
  # 重启应用(假设启动脚本支持 stop 参数)
  $script_path
  sleep 2
  # 启动应用
  # $script_path start
  echo "应用 $app_name 重启完成!"
}

# 重启所有应用
function restart_all() {
  for app_name in "${!apps[@]}"; do
    restart_app $app_name
  done
}

# 主逻辑
if [ $# -eq 0 ]; then
  print_help
  exit 1
fi

if [ "$1" == "all" ]; then
  restart_all
elif [ "$1" == "list" ]; then
  list_apps
else
  restart_app $1
fi