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

浙公网安备 33010602011771号