LinuxSys:linux进程管理
本文采用知识共享署名 4.0 国际许可协议进行许可,转载时请注明原文链接,图片在使用时请保留全部内容,可适当缩放并在引用处附上图片所在的文章链接。
Supervisor
介绍
Supervisor(Supervisor: A Process Control System)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写bash脚本来控制。
安装
在Ubuntu中可以使用apt-get来安装:
|
|
如果安装缓慢,可以更换中科大的源:
https://mirrors.ustc.edu.cn/help/ubuntu.html
配置
安装完成以后,我们需要编写一个配置文件,让supervisor来管理它。每个进程的配置文件都可以单独拆分,放在/etc/supervisor/conf.d/目录下,以.conf作为扩展名。
编辑模板,在开头添加以下内容:
[program:app] : 定义进程app command : 命令 directory : 进程的当前目录 user : 进程运行的用户身份
详细配置说明:
|
|
启动
如果编辑默认的supervisor.conf,则需要重启supervisor使配置文件生效:
|
|
然后运行下面的命令启动进程:
|
|
如果运行出现如下错误:
|
|
可以运行下面的命令,然后再次启动:
sudo touch /var/run/supervisor.sock sudo chmod 777 /var/run/supervisor.sock sudo service supervisor restart
看到如下信息,说明运行成功:
foo: started
也可以输入supervisorctl进入supervisor的控制台界面,同样能够看到:
foo RUNNING pid 6665, uptime 0:08:08
在supervisor的控制台输入help可以获取帮助信息,输入status可以获取当前运行的进程信息,输入exit可以退出supervisor的控制台界面。
关闭
使用下面的命令就可以关闭supervisor启动的进程:
|
|
可以看到输出信息:
foo: stopped
常用命令
更新新的配置到supervisord
|
|
重新启动配置中的所有程序
|
|
启动某个进程(program_name=你配置中写的程序名称)
|
|
查看正在守候的进程(同时进入控制台)
|
|
停止某一进程 (program_name=你配置中写的程序名称)
|
|
重启某一进程 (program_name=你配置中写的程序名称)
|
|
停止全部进程
|
|
Systemd
systemd 是一个 Linux 系统基础组件的集合,提供了一个系统和服务管理器,运行为 PID 1 并负责启动其它程序。功能包括:支持并行化任务;同时采用 socket 式与 D-Bus 总线式激活服务;按需启动守护进程(daemon);利用 Linux 的 cgroups 监视进程;支持快照和系统恢复;维护挂载点和自动挂载点;各服务间基于依赖关系进行精密控制。systemd 支持 SysV 和 LSB 初始脚本,可以替代 sysvinit。除此之外,功能还包括日志进程、控制基础系统配置,维护登陆用户列表以及系统账户、运行时目录和设置,可以运行容器和虚拟机,可以简单的管理网络配置、网络时间同步、日志转发和名称解析等。
systemd所管理的所有系统资源都称作Unit,通过systemd命令集可以方便的对这些Unit进行管理。比如systemctl、hostnamectl、timedatectl、localctl等命令,这些命令虽然改写了init时代用户的命令使用习惯(不再使用chkconfig、service等命令),但确实也提供了很大的便捷性。
systemd 特点
- 最新系统都采用systemd管理(RedHat7,CentOS7,Ubuntu15…)
- CentOS7 支持开机并行启动服务,显著提高开机启动效率
- CentOS7关机只关闭正在运行的服务,而CentOS6,全部都关闭一次。
- CentOS7服务的启动与停止不再使用脚本进行管理,也就是/etc/init.d下不在有脚本。
- CentOS7使用systemd解决原有模式缺陷,比如原有service不会关闭程序产生的子进程。
systemd 语法
|
|
systemd 配置文件说明
- 每一个 Unit 都需要有一个配置文件用于告知 systemd 对于服务的管理方式
- 配置文件存放于 /usr/lib/systemd/system/,设置开机启动后会在 /etc/systemd/system 目录建立软链接文件
- 每个Unit的配置文件配置默认后缀名为.service
- 在 /usr/lib/systemd/system/ 目录中分为 system 和 user 两个目录,一般将开机不登陆就能运行的程序存在系统服务里,也就是 /usr/lib/systemd/system
- 配置文件使用方括号分成了多个部分,并且区分大小写
常用命令
列出各项启动占用的时间,但由于是并行启动,启动时间不决定启动完成先后
|
|
列出启动矢量图,用浏览器打开boot.svg文件 得到各service启动顺序
systemd-analyze plot > boot.svg