需求:

运行环境为CentOS 7系统,我们开发了一个程序,需要在开机时启动它,当程序进程crash或者开机之后,守护进程立即拉起进程。

解决方案:

使用CentOS 7中的init进程systemd

systemd简介

Linux Init & CentOS systemd

Linux一直以来采用init进程。例如下面的命令用来启动服务: 
$ sudo /etc/init.d/apache2 start 
或者\ $ service apache2 start

但是init有两个缺点: 
1、启动时间长。Init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。(这也是CentOS5的主要特征) 
2、启动脚本复杂。Init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这使得脚本变得很长而且复杂。

Init: 
Centos 5 Sys init 是启动速度最慢的,串行启动过程,无论进程相互之间有无依赖关系。 
Centos6 Upstart init 相对启动速度快一点有所改进。有依赖的进程之间依次启动而其他与之没有依赖关系的则并行同步启动。 
Centos7 systemd 与以上都不同。所有进程无论有无依赖关系则都是并行启动(当然很多时候进程没有真正启动而是只有一个信号或者说是标记而已,在真正利用的时候才会真正启动。)

systemd为了解决上文的问题而诞生。它的目标是,为系统的启动和管理提供一套完整的解决方案。根据linux惯例,字母d是守护进程(daemon) 的缩写。Systemd名字的含义就是 守护整个系统。Centos 7里systemd代替了init,成为了系统的第一个进程。PID为1.其他所有的进程都是它的子进程。

systemd 是 Linux 下的一款系统和服务管理器,兼容 SysV 和 LSB 的启动脚本。systemd 的特性有:支持并行化任务;同时采用 socket 式与 D-Bus 总线式激活服务;按需启动守护进程(daemon);利用 Linux 的 cgroups 监视进程;支持快照和系统恢复;维护挂载点和自动挂载点;各服务间基于依赖关系进行精密控制。

使用demo

Step1. 创建被监控脚本

$ cd ~
$ vim test_init_watch.sh

//脚本任务:间隔一秒钟输出一个date时间戳到指定到指定文件

#!/bin/bash

# test_init_watch.sh
while [ 1 ]
do
echo `date` >> /home/cooper/log.txt
sleep 1
done
$ chmod 777 test_init_watch.sh

//创建软链接/home/cooper/test_init_watch.sh =>/usr/sbin/sysd-test

$ sudo cd /usr/sbin
$ ln -sf /home/cooper/test_init_watch.sh sysd-test

Step2. 创建服务文件,设置init进程托管

注意:

  • systemd服务文件放置目录有系统和用户区分;系统(/usr/lib/systemd/system/)、用户(/usr/lib/systemd/user/)。
  • 在开机中没有登陆情况下就能运行的程序,应该放置在系统目录中;反之则放在用户目录中

//为了测试方便,把服务文件放在/usr/lib/systemd/system中(借鉴sshd.service):

$ cd /usr/lib/systemd/system/sysd-test.service
$ cp sshd.service sysd-test.service
$ vim sysd-test.service

// usr/lib/systemd/system/sysd-test.service

[Unit]
Description=sysd server daemon
Documentation=no
After=no
Wants=no [Service]
EnvironmentFile=no
ExecStart=/usr/sbin/sysd-test
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=1s [Install]
WantedBy=multi-user.target graphic.target #相当于runlevel:2345

// 激活开机启动。启用runlevel的2345级别

$ systemctl enable sysd-test.service

//等价于创建软链接(下面的命令不用执行)

$ cd /etc/systemd/system/multi-user.target.wants
$ ln -sf /usr/lib/systemd/system/sysd-test.service sysd-test.service
$ cd /usr/lib/systemd/system/graphical.target.wants/
$ ln -sf /usr/lib/systemd/system/sysd-test.service sysd-test.service

Step3. 启动sysd_test

//使用命令:

systemctl [start|stop|status|reload|kill] sysd-test.service

//启动

$ systemctl start sysd-test.service
$ pgrep sysd-test
$ pkill -9 sysd-test
$ pgrep sysd-test

//会发现两次pgrep进程id不一样了,表示系统自动拉起了sysd-test

//停止

$ systemctl stop sysd-test.service

 //查看进程树

systemd - CentOS 7进程守护&监控的更多相关文章

  1. .NET Core项目部署到Linux(Centos7)(八)为.NET Core项目创建Supervisor进程守护监控

    目录 1.前言 2.环境和软件的准备 3.创建.NET Core API项目 4.VMware Workstation虚拟机及Centos 7安装 5.Centos 7安装.NET Core环境 6. ...

  2. 详解Supervisor进程守护监控

    Supervisor在百度百科上给的定义是超级用户,监管员.Supervisor是一个进程管理工具,当进程中断的时候Supervisor能自动重新启动它.可以运行在各种类unix的机器上,superv ...

  3. .NET Core 部署到CentOS–2.创建守护进程, 通过Nginx公网访问

    继上一篇, 我们确定在内网可以通过 "http://localhost:5000",可以访问到站点后,接下来我们要配置"守护进程","Nginx公网8 ...

  4. centos中单进程监控

    [root@k8s6 proc]# ps aux|grep -v PID|sort -rn -k +|head - root ? Ssl : : /usr/bin/dockerd root ? Ssl ...

  5. 2017-03-05 CentOS中配置守护服务(Supervisor)监听dotnet core web程序的运行

    我们继续解决上篇博客的问题,我这个人有个毛病,不喜欢遗留什么问题,也不喜欢问题说不明白,具体要怎么解决一定要详尽,因为经常自己遇到问题的时候,去翻别人的博客,就会遇到这样的问题,很苦恼,又说废话了. ...

  6. Linux服务器部署.Net Core笔记:四、安装Supervisor进程守护

    Supervisor 是用 Python 开发的 Linux/Unix 系统下的一个进程管理工具.它可以使进程脱离终端,变为后台守护进程(daemon).实时监控进程状态,异常退出时能自动重启. Su ...

  7. 用Supervisor实现进程守护,在异常退出时自动重启

    程序启动后,有些是以daemon的形式运行,但在意外退出后,如果不能及时重新启动,会有比较严重的影响. 比如Zimg在图片处理中由于某些图片处理失败,会导致zimg进程挂掉,影响正常的服务提供,并且只 ...

  8. 安全之路 —— C++实现进程守护

    简介 所谓进程守护,就是A进程为了保护自己不被结束,创建了一个守护线程来保护自己,一旦被结束进程,便重新启动.进程守护的方法多被应用于恶意软件,是一个保护自己进程的一个简单方式,在ring3下即可轻松 ...

  9. .NET Core 部署到CentOS–3.supervisord守护进

    1. 安装 sudo yum install python-setuptoolssudo easy_install supervisor 2. 配置 安装成功后,输入supervisord 会显示配置 ...

随机推荐

  1. <h1>~<h6> 标题标签

    <h1>~</h6>标题系列标签 解释:h1到h6 中h1标签最大,h6标签最小,逐一递增. 例如: <h1>标签</h1> <h2>标签& ...

  2. 仿照手机写一个WIFI的操作程序

    本篇博客仿照手机的功能,写一个WIFI的操作程序. 手机的WIFI功能有哪些呢?当我们进入wlan的设置界面的时候,将自动识别出若干个wifi的热点,并且会自动更新,当点击某个wifi热点的时候,然后 ...

  3. matlab-画地形图

    1.画三维图 之前画曲面的三维图,运用z=x2+y2 算出z和Z,如果是给出数据的地形则没办法用公式算,为此,引入插值自动造出地形的坐标. 拟合和插值的区别:插值是必须要过点,曲线可以不光滑:拟合则是 ...

  4. Pandas | 10 排序

    Pandas有两种排序方式,它们分别是 - 按标签 按实际值 import pandas as pd import numpy as np df=pd.DataFrame(np.random.rand ...

  5. Pandas | 04 Panel 面板

    面板(Panel)是3D容器的数据.面板数据一词来源于计量经济学,部分源于名称:Pandas - pan(el)-da(ta)-s. 3轴(axis)这个名称旨在给出描述涉及面板数据的操作的一些语义. ...

  6. Java调用api使用企业邮箱账户发送邮件

    package cn.ucmed.otaka.healthcare.rubik.common; import lombok.extern.slf4j.Slf4j; import javax.mail. ...

  7. IOCP陷阱

    1. AcceptEx 10061 客户端循环连接,没有发送数据,一定次数后,连接失败,WSAGetLastError的结果是10061.并且后续无法再次连接. 这是因为其中的一个参数,详细用法参考I ...

  8. c# 3d图像显示

    1.应用directx图形库进行开发: 2.代码: public class TClass : System.Windows.Forms.Form { /// <summary> /// ...

  9. Salesforce LWC学习(八) Look Up组件实现

    本篇参考https://www.salesforcelwc.in/2019/10/lookup-in-lwc.html,感谢前人种树. 我们做lightning的时候经常会遇到Look up 或者MD ...

  10. jenkins更新为国内源

    系统管理->插件管理->高级->升级站点->URL https://jenkins-zh.gitee.io/update-center-mirror/tsinghua/upda ...