Linux Centos7 systemd 配置nginx systemd方式启动

Systemd 是一系列工具的集合,其作用也远远不仅是启动操作系统,它还接管了后台服务、结束、状态查询,以及日志归档、设备管理、电源管理、定时任务等许多职责,并支持通过特定事件(如插入特定 USB 设备)和特定端口数据触发的 On-demand(按需)任务。Systemd 的后台服务还有一个特殊的身份——它是系统中 PID 值为 1 的进程。
Systemd 目录

Unit 文件按照 Systemd 约定,应该被放置指定的三个系统目录之一中。这三个目录是有优先级的,如下所示,越靠上的优先级越高。因此,在三个目录中有同名文件的时候,只有优先级最高的目录里的那个文件会被使用。
/etc/systemd/system:系统或用户自定义的配置文件
/run/systemd/system:软件运行时生成的配置文件
/usr/lib/systemd/system:系统或第三方软件安装时添加的配置文件 (常用目录)

systemd常用的命令
 systemctl restart   服务名       #重起服务
 systemctl start     服务名       #开启服务
 systemctl stop      服务名       #停止服务
 systemctl status    服务名       #查看服务当前的状态
 systemctl enable    服务名       #设置服务开机自启动
 systemctl disable   服务名       #设置服务不开机自启动
配置systemd nginx.service
cat /usr/lib/systemd/system/nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true

[Install]
WantedBy=multi-user.target
说明

[Unit]
Description=描述信息
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking#运行方式
PIDFile=PID进程文件 可以防止启动多副本   后面的kill也需要用到这个PID
ExecStartPre=开启服务前准备条件
ExecStart=开启脚本
ExecReload=重启脚本
KillSignal=停止信号量
TimeoutStopSec=停止超时时间
KillMode=杀掉模式
PrivateTmp=独立空间

[Install]
WantedBy=multi-user.target#脚本启动模式,多用户多网络
案例:自动安装 Nginx、Mongodb、Rabbitmq服务监控检查到服务停止自动启动
cat   monitor.service   #服务配置
[Unit]
Description=The nginx_monitor server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
#ExecStartPre=/usr/bin/rm -f /run/nginx.pid
#ExecStartPre=/usr/sbin/nginx -t
#PIDFile=/run/monitor.pid
ExecStart=/opt/monitor/monitor.sh       #开启脚本路径使用绝对路径
ExecReload=/bin/kill -s HUP $MAINPID    #重启脚本是执行 停止服务--开启服务 所以这两个动作需要能执行成功
ExecStop=/usr/bin/pkill -f monitor.sh   #停止服务的命令或脚本
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true

[Install]
WantedBy=multi-user.target 
cat   monitor.sh   #监控脚本  监控Nginx、Mongodb、Rabbitmq服务检查到服务停止并自动拉起
#!/bin/bash
########## nginx
nginx.monitor(){
while :
do
    a=`ps auxc|grep nginx|grep -v grep|wc -l`
    #echo $a
    if [ $a -lt 2 ];then
        /usr/local/nginx/sbin/nginx >/dev/null 2>&1 &
    fi
    sleep 10
done
}

##########  mongod
mongod.monitor(){
    while :
do
    a=`ps auxc|grep mongod|grep -v grep|wc -l`
    #echo $a
    if [ $a -lt 1 ];then
        /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/etc/mongodb.conf >/dev/null 2>&1 &
    fi
    sleep 10
done    
}

######### rabbitmq
rabbitmq.monitor(){
    while :
do
    a=`ps aux|grep rabbitmq|grep -v grep|wc -l`
    #echo $a
    if [ $a -lt 6 ];then
        rabbitmq-server start >/dev/null 2>&1 &
    fi
    sleep 10
done    
}
######### monitor

nginx.monitor &    #按需要注释或打开监控项
mongod.monitor &
rabbitmq.monitor &
cat   install.monitor.sh   #监控安装脚本
#/bin/bash
mkdir /opt/monitor
cp ./monitor.sh     /opt/monitor
cp ./monitor.service  /usr/lib/systemd/system/
chmod 755 /opt/monitor/monitor.sh
chmod 644 /usr/lib/systemd/system/monitor.service
systemctl daemon-reload
cat   delete.monitor.sh   #监控删除脚本
#!/bin/bash
rm -fr /opt/monitor/monitor.sh  /usr/lib/systemd/system/monitor.service
systemctl daemon-reload
注意事项:脚本应该是可以后台执行的模式:以下 while: 循环脚本 因为启动有超时限制,systemctl start "服务名" 会被系统认为服务启动超时 所以可以用定义函数方法来解决
##########  mongod
while :
do
    a=`ps auxc|grep mongod|grep -v grep|wc -l`
    #echo $a
    if [ $a -lt 1 ];then
        /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/etc/mongodb.conf >/dev/null 2>&1 &
    fi
    sleep 10
done   
22 声望
6 粉丝
0 条评论
推荐阅读
31.kubernetes(k8s)笔记 Promethues(二) HPA 横向扩展AutoScale
prometheus:prometheus能够收集各种维度的资源指标,比如CPU利用率,网络连接的数量,网络报文的收发速率,包括进程的新建及回收速率等等,能够监控许许多多的指标,而这些指标K8S早期是不支持的,所以需要把pro...

Bigyong阅读 1.6k

把 Go 放到 Nginx C module 之中
最近一段时间,我在做一件有趣的事情,让一个 Nginx C module 通过 Go 代码来访问 gRPC 服务。不得不感慨 Go 真的很流行,让人无法拒绝。之前我做 wasm-nginx-module 时就试图把 tinygo 跑在 Nginx 里面,这次则...

spacewander2阅读 2.1k评论 2

化虹为桥 - Nginx 如何代理 UDP “连接”
众所周知,UDP 并不像 TCP 那样是基于连接的。但有些时候,我们需要往一个固定的地址发送多个 UDP 来完成一个 UDP 请求。为了保证服务端能够知道这几个 UDP 包构成同一个会话,我们需要在发送 UDP 包时绑定某个端...

spacewander4阅读 261

[nginx] 实现域名代理
业务场景有两个系统A、B,A、B两系统均有独立域名,但对外只想暴露A域名。需要实现通过 A域名+B系统子路由 访问 系统B的子页面,图示如下。

DiracKeeko阅读 874

前端跨域问题解决办法, Nginx配置为例
💡 Tips:可以将多个系统融合成一个系统,无技术壁垒,可以像iframe一样实现功能组合● qiankun (阿里支持)● micro-app (京东支持)● wujie (腾讯支持)本人推荐● lingjie 携程支持

smallStone阅读 829

使用Python查询国内 COVID-19 疫情
有时我们只是想要一个速的工具来告诉当前疫情的情况,我们只需要最少的数据。 使用Python语言和tkinter图形化显示数据。首先,我们使用 Tkinter 库使我们的脚本可以图形化显示。使用 requests 库从 丁香园 获取数...

刘遄阅读 828

封面图
gitlab-ce使用nginx做反向代理的方式启用https
由于某些未知的原因,gitlab-ce的https近期出现了问题,被chrome识别出是非安全的连接。索性我们将了gitlab-ce的https改为http。但当下https基本上已经成为了标准,不启用https好像有点说不过去。

myskies阅读 760

22 声望
6 粉丝
宣传栏