linux环境java包开机自启动脚本

一、服务开机自启动脚本

#!/bin/bash

# 设置monitor_java_services脚本的路径
monitor_script_path="/usr/local/tech/autoinstall/scripts/monitor_java_services.sh"

# 确保该文件存在并具有可执行权限
if [ ! -f "$monitor_script_path" ]; then
  echo "monitor_java_services.sh not found at $monitor_script_path"
  exit 1
fi
chmod +x "$monitor_script_path"

# 创建systemd服务文件
cat <<EOF | sudo tee /etc/systemd/system/monitor_java_services.service
[Unit]
Description=Monitor Java Services

[Service]
ExecStart=$monitor_script_path

[Install]
WantedBy=multi-user.target
EOF

# 重新加载systemd配置
sudo systemctl daemon-reload

# 启用并启动服务
sudo systemctl enable monitor_java_services.service
sudo systemctl start monitor_java_services.service

# 输出服务状态
sudo systemctl status monitor_java_services.service

二、检测服务状态自启动

#!/bin/bash

SERVER_DIR="/home/tech/server"
services=("route/route.jar" "system/system.jar" "home/home.jar" "ts/traffic-condition-server.jar" "assets-basic-web/assets-basic-web.jar" "real-time-monitor/real-time-monitor.jar" "video/video.jar" "situation/situation.jar" "duty/duty.jar" "assets-detection-server-web/assets-detection-server-web.jar" "tsjs/traffic_condition.jar" "vnp/vnp.jar" "dh-vnp-gb28181/dh-vnp-gb28181.jar" "ydfb/ydfb-server-1.0-SNAPSHOT.jar")

JAVA_HOME="/usr/local/java/jdk1.8"
JAVA_CMD="$JAVA_HOME/bin/java"
JAVA_OPTS="-Xms256m -Xmx512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:+UseParallelGC -XX:InitialCodeCacheSize=32m -XX:ReservedCodeCacheSize=128m -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -Xloggc:/dhxdata/logerror/java_gc.log -XX:+UseCompressedOops "

start_jar() {
  local jar_path=$1
  $JAVA_CMD $JAVA_OPTS -jar $jar_path &
  if [[ $? -ne 0 ]]; then
    echo "Failed to start $jar_path"
  fi
}

monitor_jar() {
  local jar_path=$1
  local jar_pid=$(pgrep -f "$jar_path")
  if [[ -z "$jar_pid" ]]; then
    echo "Restarting $jar_path"
    start_jar $jar_path
  else
    echo "$jar_path is running with PID $jar_pid"
  fi
}

while true; do
  for service in "${services[@]}"; do
    full_path="$SERVER_DIR/$service"
    {
      monitor_jar $full_path
    } || {
      echo "Error occurred while monitoring $full_path"
    }
  done

  sleep 240
done

Tip其他方便重启脚本

#!/bin/bash

SERVER_DIR="/home/tech/jtgkpt/server"
subdirs=("route" "system" "home" "ts" "assets-basic-web" "auto-follow-visual-web" "real-time-monitor" "video" "situation" "duty" "websocket" "tsjs" "vnp" "dh-vnp-gb28181")
jar_names=("route.jar" "system.jar" "home.jar" "traffic-condition-server.jar" "assets-basic-web.jar" "auto-follow-visual-web.jar" "real-time-monitor.jar" "video.jar" "situation.jar" "duty.jar" "websocket.jar" "traffic_condition.jar" "vnp.jar" "dh-vnp-gb28181.jar")

JAVA_HOME="/home/software/jdk1.8"
JAVA_CMD="$JAVA_HOME/bin/java"
JAVA_OPTS="-Xms512m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=256m"

kill_jar_process() {
  local jar_path=$1
  local jar_pid=$(pgrep -f "$jar_path")

  if [[ -n "$jar_pid" ]]; then
    echo "正在杀死PID为 $jar_pid 的服务"
    if kill -9 "$jar_pid" ; then
      echo "PID为 $jar_pid 的服务已成功被杀死."
    else
      echo "试图杀死PID为 $jar_pid 的服务时出现错误"
    fi
  fi
}

start_jar_process() {
  local jar_path=$1
  local subdir=$2
  local jar_name=$3
  local cmd="$JAVA_CMD $JAVA_OPTS -jar $jar_path"  

  cd "$SERVER_DIR/$subdir"
  echo "正在启动 $jar_name..."
  if nohup $cmd &> "$SERVER_DIR/$subdir/start.log" & then
    echo "$jar_name 服务已成功启动."
  else
    echo "试图启动 $jar_name 服务时出现错误."
  fi
}

for ((i = 0; i < ${#subdirs[@]}; i++)); do
  subdir="${subdirs[i]}"
  jar_name="${jar_names[i]}"
  jar_path="$SERVER_DIR/$subdir/$jar_name"

  if [[ ! -f "$jar_path" ]]; then
      echo "警告: 文件 $jar_path 不存在."
      continue
  fi

  kill_jar_process "$jar_path"
  sleep 2 # 等待进程被完全杀死
  start_jar_process "$jar_path" "$subdir" "$jar_name"
done

echo "所有服务应已重启. 请检查上述消息以查看是否有任何错误."

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刀鋒偏冷

支持一发成植,一步修复发际

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值