linux配置服务启动

1.通过yum安装的会自动创建systemctl

  此时systemctl enable **,

  例如:systemctl enable nginx ; 启动systemctl start nginx,停止 systemctl stop nginx ,查看状态 systemctl status nginx

2.配置mysql开机启动

 一.  将安装目录下的 support-files 目录下mysql.server复制到etc/rc.d/init.d/mysql

cp /home/data/mysql-5.7.17/support-files/mysql.server /etc/rc.d/init.d/mysql

二.  复制后赋予权限

chmod +x /etc/init.d/mysql

三. 添加到服务列表

chkconfig --add mysql

四. 查看服务列表

chkconfig --list

效果:

 

 

 

 注意看到mysql后面的345都是开或者是on表示成功, 如果是 关或者 off 则需要开启,执行以下命令

chkconfig --level 345 mysqld on

3.配置nginx开机启动

Nginx不能采用上面的方式配置开机服务自启。

 一.  首先进入配置文件的目录

cd /usr/lib/systemd/system

二.  然后修改nginx的服务配置

vim nginx.service

 #按i进入修改,修改的文本内容如下

[Unit]                                                //说明

Description=nginx                                  //服务名

After=network.target                      //服务类别

 

[Service]                                                 //参数配置

Type=forking                                          //ng后台运行的类型

ExecStart=/usr/local/nginx/nginx/sbin/nginx -c /usr/local/nginx/nginx/conf/nginx.conf  //启动命令,用自己的路径

ExecReload=/usr/local/nginx/nginx/sbin/nginx -s reload //重启命令,用自己的路径

ExecStop=/usr/local/nginx/nginx/sbin/nginx -s quit      //停止命令,用自己的路径

PrivateTmp=true    //启用私有化临时目录,保证安全性,避免和其他服务冲突

 

[Install]

WantedBy=multi-user.target

修改完毕后esc退出编辑,输入:wq保存并退出

三. 然后重启systemctl

systemctl daemon-reload

 然后就可以使用systemctl启动nginx了

#启动nginx服务

systemctl start nginx.service

#停止nginx服务

systemctl stop nginx.service

#重启nginx服务

systemctl restart nginx.service

#重新加载nginx配置(不停止nginx服务加载新修改的配置)

systemctl reload nginx.service

 

四. mysql也可采用上述方式设置,mysql的启动文件配置,参考如下:

[Unit]

Description=MySQL Server

Documentation=man:mysqld(8)

Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html

After=network.target

After=syslog.target

[Install]

WantedBy=multi-user.target

[Service]

User=mysql

Group=mysql

ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf

LimitNOFILE = 5000

#Restart=on-failure

#RestartPreventExitStatus=1

#PrivateTmp=false

 

4.配置java项目开机启动

一. 在Linux上设置开机启动Java程序,例如:test.jar在Linux上启动Java程序的命令:

nohup java -jar test.jar >/dev/null 2>&1 &

这样启动可以避免输出日志到控制台。

 

二. 可以将程序启动的指令做成一个shell脚本,简单的做法创建一个test.sh文件,内容如下:

创建一个 test.sh 可执行文件(我是放在.jar目录下):

vim /home/ruoyi/run.sh

 

#!/bin/bash

 

JAVA_HOME=/usr/local/java/jdk1.8.0_161

CLASSPATH=.:%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib

PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin

export PATH CLASSPATH JAVA_HOME

 

nohup java -jar /usr/local/java/test.jar > /dev/null 2>&1 &
  • nohup可以保证程序在后台运行,你可以进行其他操作,甚至可以退出终端。
  • /dev/null 2>&1 这条命令的意思是将标准输出和错误输出全部重定向到/dev/null(可以看成黑洞)中,也就是将产生的所有信息丢弃

三. 保存退出,并赋予可执行权限

chmod +x /home/ruoyi/run.sh

四. 最重要的一步就是修改Linux的开机启动配置文件(/etc/rc.d/rc.local)

vim /etc/rc.d/rc.local
# !/bin/sh

#

# This script will be executed *after* all the other init scripts.

# You can put your own initialization stuff in here if you don't

# want to do the full Sys V style init stuff.

 
touch /var/lock/subsys/local

/home/ruoyi/run.sh

 

五. 确定有运行这个文件的权限

chmod +x /etc/rc.d/rc.local

上面的sh脚本比较简单,复杂一些的配置如下:

#!/bin/bash
# log format function
function log(){
   loglevel="$1"
   shift
   if [ "$1" ];then case "$loglevel" in
       debug)
          ;; # echo -e "\033[35m[$(date "+%Y-%m-%d %H:%M:%S")] [DEBUG]\t${@}\033[0m" ;;
       info)
          echo -e "\033[32m[$(date "+%Y-%m-%d %H:%M:%S")] [INFO]\t${@}\033[0m" ;;
       warning)
          echo -e "\033[33m[$(date "+%Y-%m-%d %H:%M:%S")] [WARNING]\t${@}\033[0m" ;;
       error)
          echo -e "\033[31m[$(date "+%Y-%m-%d %H:%M:%S")] [ERROR]\t${@}\033[0m" ;;
       *)
          echo "${@}" ;;
     esac
   fi
}
 
# Load environment variables
if [ -f "/etc/profile" ]; then
   log debug "从 [/etc/profile] 加载环境变量."
   . /etc/profile
fi
if [ -f "$HOME/.bash_profile" ]; then
   log debug "从 [$HOME/.bash_profile]加载环境变量."
   . $HOME/.bash_profile
fi
if [ -f "$HOME/.bashrc" ]; then
   log debug "从 [$HOME/.bashrc]加载环境变量."
   . $HOME/.bashrc
fi
 
# Verify that the service is running as a normal user
if [ "$(whoami)" == "root" ]; then
   log warning "不推荐使用 [$(whoami)] 用户运行应用服务."
fi
 
# Verify the java command, otherwise exit directly
if [ ! "$(command -v java)" ];then
   log error "未找到java命令,必须先安装JDK或JRE并配置环境变量."; exit 1
fi
 
# Switch working directory and define variables
cd $(dirname $0)
basedir="$(pwd -P)"
jarfile="$(find $basedir -maxdepth 1 -type f -name "*.jar")"
jarnums="$(find $basedir -maxdepth 1 -type f -name "*.jar"|wc -l)"
logfile="$basedir/log/application.log"
logconf="$basedir/log/logrotate.cnf"
logstat="$basedir/log/logrotate.status"
jarback="$basedir/backup"
 
log debug  "basedir: [$basedir]"
log debug  "jarfile: [$jarfile]"
log debug  "jarnums: [$jarnums]"
log debug  "logfile: [$logfile]"
log debug  "logconf: [$logconf]"
log debug  "jarback: [$jarback]"
 
# check jar file exists
function check(){
   if [ "$jarnums" -lt "1" ];then
      log error "目录 [${basedir}] 下未找到.jar文件."; exit 1
   elif [ "$jarnums" -gt "1" ];then
      log warning "目录 [${basedir}] 下.jar文件不唯一"; exit 1
   else
      pid="$(ps -aux|grep "java"|grep "$jarfile"|grep -v "grep"|awk '{print $2}'|tr '\n' ' ')"
   fi
}
 
# status function
function status(){
   check
   if [ "$pid" ];then
      log info "应用服务 [$(basename $jarfile)] 状态: 运行中,PID:[ $pid]."
   else
      log info "应用服务 [$(basename $jarfile)] 状态: 未运行."
   fi
}
 
# start function
function start(){
   check
   if [ "$pid" ];then
      log warning "应用服务 [$(basename $jarfile)] 已经在运行中, PID: [ $pid]."
   else
      log info "应用服务 [$(basename $jarfile)] 正在启动..."
      log debug "创建应用服务日志目录"
      log debug "mkdir -p $basedir/log"
      mkdir -p "$basedir/log"
      log debug "nohup $(command -v java) -Xms256M -Xmx512M -jar $jarfile $@ >> $logfile 2>&1 &"
      nohup $(command -v java) -Xms256M -Xmx512M -jar $jarfile $@ >> $logfile 2>&1 &
      pid="$!"
      if [ "$pid" ];then
         log debug "应用服务 日志轮转开始."
         log debug "(while kill -0 $pid;do rotate;sleep 60;done) > /dev/null 2>&1 &"
         (while kill -0 $pid;do rotate;sleep 60;done) > /dev/null 2>&1 &
         log info "应用服务 [$(basename $jarfile)] 启动完成,PID: [ $pid ]"
         log warning "应用服务 [$(basename $jarfile)] 日志输出将在30秒后自动退出."
         sleep 3
         log debug "应用启动日志: tail -1f $logfile &"
         tail -1f $logfile &
         (sleep 30 && kill $!) > /dev/null 2>&1 &
         log debug "(sleep 60 && kill $!) > /dev/null 2>&1 &"
      fi
   fi
}
 
# stop function
function stop(){
   check
   if [ "$pid" ];then
      log info "应用服务 [$(basename $jarfile)] 停止中..."
      log debug "kill -9 $pid"
      kill -9 $pid > /dev/null 2>&1
      sleep 2 && echo
      log debug "应用服务 [$(basename $jarfile)] 已经停止"
   else
      log warning "应用服务 [$(basename $jarfile)] 似乎没有在运行,不需要停止"
   fi
}
 
# restart function
function restart(){
   stop
   sleep 2
   start "$@"
}
 
 
# console start function
function console(){
   check
   if [ "$pid" ];then
      log warning "应用服务 [$(basename $jarfile)] 已经在运行中, PID: [ $pid]."
   else
      log info "应用服务 [$(basename $jarfile)] 正在启动..."
      log warning "console 参数仅用于调试, 使用 [Ctrl + C] 终止调试进程."
      log debug "创建应用服务日志目录"
      log debug "mkdir -p $basedir/log"
      mkdir -p "$basedir/log"
      sleep 2
      log debug "cd $basedir && $(command -v java) -Xms256M -Xmx512M -jar $jarfile $@ 2>&1 | tee $logfile"
      cd $basedir && $(command -v java) -Xms256M -Xmx512M -jar $jarfile $@ 2>&1 | tee $logfile
   fi
}
 
# rotate function
function rotate(){
   log debug "创建应用服务日志目录"
   log debug "mkdir -p $basedir/log"
   mkdir -p "$basedir/log"
   if [ ! -e $logconf ];then
      log warning "日志轮转配置文件 [${logconf}] 不存在, 将创建此配置文件."
      log debug "${logfile} {\n  size 32M\n rotate 16\n  compress\n  missingok\n  dateext\n  dateformat -%Y%m%d-%s\n  copytruncate\n}"
      echo -e "${logfile} {\n  size 32M\n rotate 16\n  compress\n  missingok\n  dateext\n  dateformat -%Y%m%d-%s\n  copytruncate\n}" > $logconf
   fi
   if [ -e $logfile ];then
      log info "归档并压缩应用服务日志 [${logfile}]"
      log debug "/usr/sbin/logrotate -s $logstat $logconf"
      /usr/sbin/logrotate -s $logstat $logconf
      log info "归档并压缩日志文件 ${logfile} 完成."
      log debug "使用 [ll -h ${logfile}*] 命令查看归档日志文件"
   fi
}
 
# backup function
function backup(){
   if [ ! -d "$jarback" ];then
      log warning "创建jar包备份目录 [$jarback]"
      log debug "mkdir -p $jarback"
      mkdir -p $jarback
   fi
   jarbasename="$(basename $jarfile)"
   jarbackname="${jarbasename%.*}-$(date "+%Y%m%d-%H%M%S").${jarbasename##*.}"
   log debug "应用服务 备份jar包目录 [$jarback]"
   log debug "应用服务 备份jar包名称 [$jarback/$jarbackname]"
   log info "备份jar包文件 [$jarfile]"
   log info " ==> jar包备份目录 [$jarback]"
   cp $basedir/$jarbasename $jarback/$jarbackname
}
 
# help
function help(){
   log "" "使用说明:"
   log "" " $0 {start|stop|status|restart|console|backup|rotate} [options]"
   log "" " [options] : "
   log "" "   --spring.config.location=app.yml,app-ext.yml  # 指定服务配置文件为: app.yml,app-ext.yml"
   log "" "   --spring.profiles.active=development          # 指定服务配置环境为: development"
   log "" "   --server.port=8888                            # 指定服务配置端口为: 8888"
   log "" "   --server.servlet.context-path=/test           # 指定服务配置路径为: /text"
}
 
act="$1"
shift
arg="$(echo "$@"|sed 's/[ ]*=[ ]*/=/g')"
 
log debug "Script parameters [ $act ]"
 
case "$act" in
   start)
      start $arg ;;
   stop)
      stop ;;
   restart)
      restart $arg ;;
   status)
      status ;;
   rotate )
      rotate ;;
   console)
      console $arg ;;
   backup)
      backup ;;
   *)
    start $arg ;;
esac
 
exit 0

 

参考地址:

https://blog.csdn.net/ajpjnk/article/details/124711407

https://www.cnblogs.com/springclout/p/16554887.html

https://blog.csdn.net/weixin_44260380/article/details/126644641

 

posted @ 2022-12-29 16:15  八方鱼  阅读(460)  评论(0)    收藏  举报