centos systemd 方式设置java开机自启

前言

工作中,经常见到需要将java设置为开机自启,通常的思路是将java设置为服务,然后纳入systemd管理,然后开启开机自启;以下是实现步骤

编写java服务脚本

/etc/systemd/system下新建 my_java.service,内容

[Unit]
Description=My Java Application Service
After=network.target

[Service]
#当服务崩溃时自动重启
Restart=on-failure
#重启前等待10秒
RestartSec=10s
ExecStart=/opt/my_java/my_java.sh start
ExecStop=/opt/my_java/my_java.sh stop

[Install]
WantedBy=multi-user.target

为了便于维护,通常将启动命令单独保存为脚本文件,my_java.sh内容

#!/bin/sh
PNAME='my_java'

# 只有root用户才能执行
if [ $(id -u) != "0" ]; then
  echo "Error: You must be root to run this script";
  exit 1;
fi

# 有新jar则先移动到目标目录,实际,通常是上传到用户主目录下,然后执行脚本就行了
if [ -f /home/my_user/${PNAME}*.jar ]; then
  mv /home/my_user/${PNAME}*.jar /opt/my_java;
fi

# 找到运行中的java进程id
PID=`ps auxwwwwww | grep /usr/local/jdk1.8.0_301/bin/java | grep ${PNAME} | awk '{print $2}'`
# 将jar所在路径按照时间排序
JAR=`ls -lt /opt/my_java/${PNAME}*.jar | head -1 | awk '{print $NF}'`

case "${1}" in
  'start')
    if [ -n "${PID}" ];
    then
      echo "${0}: ${PNAME} is already running: ${PID}"
      exit 0
    fi
# 注意,受限于systemd不能读取环境变量,所以脚本中的java命令要改为全路径
# 因为service默认是simple类型,不能以nohup方式启动
    /usr/local/jdk1.8.0_301/bin/java -jar  ${JAR} --spring.profiles.active=myProfile 2>&1 1>/dev/null
  ;;

  'stop')
    if [ -n "${PID}" ];
    then
      kill -9 $PID;
    fi
  ;;

  'restart')
    if [ -n "${PID}" ];
    then
      kill -9 $PID;
    fi
    echo "/usr/local/jdk1.8.0_301/bin/java -jar   ${JAR} --spring.profiles.active=myProfile 2>&1 1>/dev/null"| at now
  ;;

  
  'status')
    if [ -n "${PID}" ];
    then
      echo "${0}: ${PNAME} is ONLINE=${PID}, current jar is ${JAR}"
      exit 0
    else
      echo "${0}: ${PNAME} is OFFLINE, current jar is ${JAR}"
      exit 0
    fi
  ;;

  *)
    echo "Usage: ${0} { start | stop | status }"
    exit 1
  ;;

esac

exit 0

因为service默认类型是simple,所以不能以nohup方式启动java,可参考linux systemd Failed at step EXEC spawning /some/path/my_sh.sh: Permission denied

设置开机自启/禁用

设置开机自启

systemctl enable my_java

禁用开机自启

systemctl disable my_java

查看服务状态

systemctl status my_java
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值