linux自作java -jar xxx服务开机自启动脚本
1、java应用服务
[root@edge-01 services]# tree service-manage/ ├── bin │ ├── deamon.sh #启动脚本 │ └── service.pid #pid ├── conf #配置文件路径 │ ├── bootstrap.yml │ ├── logback-spring.xml │ └── mapper │ └── taos │ └── HistoryDataMapper.xml ├── lib #jar所在路径 │ └── service-manage-biz-0.0.1.jar └── logs #日志路径 ├── gc.log └── service-manage-biz ├── 2022-12 │ └── error.2022-12-29.0.log.gz
2、自作启动脚本
创建启动脚本
vi deamon.sh
内容如下
#!/usr/bin/env bash # $0:当前Shell程序的文件名 # dirname $0,获取当前Shell程序的路径 # cd `dirname $0`,进入当前Shell程序的目录 # $(cd "$(dirname "$0")"; pwd) 返回当前文件所在的路径 baseDir=$(cd "$(dirname "$0")"; pwd) #引用该路径 ROOT_DIR="${baseDir}/.." export JAVA_HOME=$JAVA_HOME export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export LOG_HOME="${ROOT_DIR}/logs" PIDFILE="${ROOT_DIR}/bin/service.pid" #app name APP_NAME=`ls ${ROOT_DIR}/lib/service-manage-biz-*.jar` APP_CONF="${ROOT_DIR}/conf/application.yml" #设置需要加载的包的目录 最后加上项目主包 CLASSPATH=".:${ROOT_DIR}/lib/*:${ROOT_DIR}/conf/*" #这里可替换为你自己的执行程序,其他代码无需更改 ENV=dev #设置虚拟机参数 JAVA_OPTS="-server -Xmx512m -Xms512m -Xmn256m -Xss256k -XX:MetaspaceSize=96m" JAVA_OPTS="$JAVA_OPTS -XX:+DisableExplicitGC" JAVA_OPTS="$JAVA_OPTS -XX:+UseConcMarkSweepGC" JAVA_OPTS="$JAVA_OPTS -XX:CMSMaxAbortablePrecleanTime=5000" JAVA_OPTS="$JAVA_OPTS -XX:+CMSClassUnloadingEnabled " JAVA_OPTS="$JAVA_OPTS -XX:+CMSParallelRemarkEnabled" JAVA_OPTS="$JAVA_OPTS -XX:+UseFastAccessorMethods" JAVA_OPTS="$JAVA_OPTS -XX:+UseCMSInitiatingOccupancyOnly" JAVA_OPTS="$JAVA_OPTS -XX:+ExplicitGCInvokesConcurrent" JAVA_OPTS="$JAVA_OPTS -XX:CMSInitiatingOccupancyFraction=80" JAVA_OPTS="$JAVA_OPTS -XX:SurvivorRatio=10" JAVA_OPTS="$JAVA_OPTS -XX:MaxDirectMemorySize=1g" JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LOG_HOME/java.hprof" JAVA_OPTS="$JAVA_OPTS -Xloggc:$LOG_HOME/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps" JAVA_OPTS="$JAVA_OPTS -Dlog_path=$LOG_HOME" #使用说明,用来提示输入参数 usage() { echo "Usage: sh 执行脚本.sh [start|stop|restart|status] [dev]|[test]|[prod]" exit 1 } #检查程序是否在运行 is_exist(){ pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' ` #如果不存在返回1,存在返回0 if [ -z "${pid}" ]; then return 0 else return 1 fi } #启动方法 start(){ if [ ! -d "${LOG_HOME}" ]; then mkdir ${LOG_HOME} fi if [ -f "$APP_CONF" ];then PARAM="--spring.config.location=${APP_CONF} --spring.profiles.active=${ENV}" else PARAM="--spring.profiles.active=${ENV}" fi is_exist if [ $? -eq "0" ]; then echo "Service start ..." #采用加载所有jar 和指定 main class 启动方式 nohup java ${JAVA_OPTS} -classpath ${CLASSPATH} -jar $APP_NAME ${PARAM} >/dev/null 2>&1 & echo $! > $PIDFILE echo "Service start SUCCESS. " else echo "Service is already started." fi } #停止方法 #停止方法 stop(){ is_exist if [ $? -eq "0" ]; then echo "Service is already stop ..." rm -rf $PIDFILE else rm -rf $PIDFILE pid=`ps -ef |grep -i ${APP_NAME} |grep -v grep |awk -F" " '{print $2}'` if [ ! -n "$pid" ];then echo "Service is already stop ..." else kill -9 $pid rm -rf $PIDFILE echo "Service is stop SUCCESS!" fi fi } #输出运行状态 status(){ if [ -f "$PIDFILE" ]; then pid=`cat "$PIDFILE"` pid=`ps -ef|grep $pid|grep -v "grep" |awk -F" " '{print $2}'` if [ -z $pid ];then echo "${APP_NAME} is NOT running." else echo "${APP_NAME} is running. Pid is ${pid}" fi else is_exist if [ $? -eq "0" ];then echo "${APP_NAME} is NOT running." else echo "${APP_NAME} is running. Pid is ${pid}" fi fi } #重启 restart(){ stop start } if [ $2 ];then ENV=$2 fi #根据输入参数,选择执行对应方法,不输入则执行使用说明 case "$1" in "start") start ;; "stop") stop ;; "status") status ;; "restart") restart ;; *) usage ;; esac
注:
启动、停止、重启、查看状态:sh deamon.sh [start|stop|restart|status] [dev]|[test]|[prod]
3.自作系统级别开机自启动脚本
创建启动脚本
vi /usr/lib/systemd/system/service-manage.service
内容如下:
[Unit] Description=service-manage After=network.target [Service] Type=forking Environment=HOME=/root/service-manage/bin ExecStart=/root/service-manage/bin/deamon.sh start prod ExecReload=/root/service-manage/bin/deamon.sh restart prod ExecStop=/root/service-manage/bin/deamon.sh stop prod PrivateTmp=true [Install] WantedBy=multi-user.target
4.启动、重启、停止
4.启动、重启、停止 #启动该服务 systemctl start service-manage.service #查看该服务状态 systemctl status service-manage.service #重启服务 systemctl restart service-manage.service #停止服务状态 systemctl stop service-manage.service
5.设置开机自启动
进行启动停止服务,执行如下命令
#重新加载所有service服务 systemctl daemon-reload #开机启动service-manage.service systemctl enable service-manage.service #查看该service是否开机启用 systemctl is-enabled service-manage.service #查询开机启动项服务 systemctl list-unit-files #过滤启动项 systemctl list-unit-files | grep enable #过滤未启动项 systemctl list-unit-files | grep disabled #过滤某个服务 systemctl list-unit-files | grep service-manage
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性