Technology Sharing

  • 首页
  • 资料分享
  • 在线工具
    • 随机密码生成器
  • 介绍
  • RSS
  • privacy
  • 云产品推广
    • 腾讯云
    • 阿里云
Share IT knowledge
  1. 首页
  2. linux
  3. 正文

linux systemd 多种启动方案

2022年11月30日 215点热度 0人点赞 0条评论

背景

此篇文章以nginx服务为例,如果检查nginx服务启动异常(一般语法有误),则启动备选方案。

方案一:定义systemd OnFailure参数

查看systemd 关于nginx的配置文件

编辑文件,添加OnFailure参数,如果nginx启动失败,则启动备选服务nginx.failure.service

vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
OnFailure=nginx.failure.service

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/sh -c "/bin/kill -s HUP $(/bin/cat /var/run/nginx.pid)"
ExecStop=/bin/sh -c "/bin/kill -s TERM $(/bin/cat /var/run/nginx.pid)"

[Install]
WantedBy=multi-user.target

创建服务nginx.failure.service

vim /lib/systemd/system/nginx.failure.service

[Unit]
Description=nginx backup


[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.bak.conf
ExecReload=/bin/sh -c "/bin/kill -s HUP $(/bin/cat /var/run/nginx.pid)"
ExecStop=/bin/sh -c "/bin/kill -s TERM $(/bin/cat /var/run/nginx.pid)"

[Install]
WantedBy=multi-user.target

重新加载systemd服务

systemctl daemon-reload

方案二:自定义启动shell

查看systemd 关于nginx的配置文件

编辑文件,修改ExecStart启动命令

vim /lib/systemd/system/nginx.service

[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
#ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecStart=/bin/sh -c '/usr/sbin/nginx -t &&  /usr/sbin/nginx -c /etc/nginx/nginx.conf  || /usr/sbin/nginx -c /etc/nginx/nginx.bak.conf'
ExecReload=/bin/sh -c "/bin/kill -s HUP $(/bin/cat /var/run/nginx.pid)"
ExecStop=/bin/sh -c "/bin/kill -s TERM $(/bin/cat /var/run/nginx.pid)"

[Install]
WantedBy=multi-user.target

ExecStart启动命令介绍
第一步:检查nginx语法/usr/sbin/nginx -t(默认检查/etc/nginx/nginx.conf)
第二步:nginx语法检查通过,则启动/usr/sbin/nginx -c /etc/nginx/nginx.conf
第三步:nginx语法检查不通过,则启动/usr/sbin/nginx -c /etc/nginx/nginx.bak.conf

重新加载systemd服务

systemctl daemon-reload
打赏微海报分享
标签: 暂无
最后更新:2022年11月30日

nico

Linux运维工程师 软考网络工程师 && 软考信息安全工程师

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

nico

Linux运维工程师
软考网络工程师 && 软考信息安全工程师

最新 热点 随机
最新 热点 随机
linux部署JDK环境 [Solved] MariaDB import issue: Error at line 1: Unknown command '\-'. Could not retrieve mirrorlist http://mirrorlist.centos.org/ CentOS 7 Kubernetes如何删除卡在“Terminating”状态的命名空间 解决GitLab Runner签名无效 如何禁用 Ubuntu "Daemons using outdated libraries" 弹出窗口
解锁WordPress:上传文件大小限制调整指南 Linux chattr 数据库、数据表的导出与导入(mysql) Python操作Excel (openpyxl模块) 简单实用:Linux 下格式化显示 XML 文件 Python-连接linux服务器批量执行命令
最近评论
woodcockkienzlelsj8o9+73s48g9rr3m0@gmail.com 发布于 10 个月前(07月17日) necessitatibus corporis et odit nam quo harum et c...
RonaldG 发布于 10 个月前(07月07日) Very interesting topic, thank you for putting up.&...
小黑 发布于 1 年前(12月28日) 不错
nico 发布于 2 年前(02月09日) 嘻嘻嘻!!!
Bruse 发布于 2 年前(02月09日) 我来啦!!!
nico 发布于 2 年前(12月10日) 方便查询
Justin 发布于 2 年前(12月10日) 写的很好,谢谢分享!我 Mark 一下~
nico 发布于 3 年前(11月18日) 主题的原因吧
Justin 发布于 3 年前(09月22日) 这篇文章的质量很高呀!写得很详细~ 话说你的文章是隐藏了发布时间吗?
Justin 发布于 3 年前(08月27日) 好家伙,这标题乍一看还以为你打算进军英文技术写作领域了🤓

COPYRIGHT © 2023 Technology Sharing. ALL RIGHTS RESERVED.

备案图标 皖公网安备34132402000202 皖ICP备2023004851号-1