Ubuntu系统进程管理笔记

前言

今天对前端服务器进行迁移,本来前端服务器就一台,都是放置前端静态文件的地方,应该是比较简单的。唯一的问题是由于Nginx需要给ie8浏览器个i同https访问支持,不得不对Nginx进行重新编译。编译完成后想启动一下服务,才发现没有systemctl,于是使用service命令,奇怪的是service命令无法居然无法识别nginx服务。经过一番折腾终于解决了问题。
以前这些命令一直是拿来就用,没什么深究,只有遇到了问题才知道基础的重要性。下面就对这些东西做个简单的记录。

进程管理工具

Linux进程管理常用的工具有service、systemctl、update-rc.d等。其中越来越多的发行版使用systemctl作为程序的的管理工具。问题就在于今天我所使用的Ubuntu版本是14.04,也就是还没有把systemctl作为默认的软件启动管理工具。systemctl是15.0x之后的版本才作为自带的进程管理工具的。

SysV/Upstart/systemd是什么

简单的说,他们是系统初始化时的第一个进程,也就是pid为1的进程,可以通过ps -p 1 命令来检测。

$ ps -p 1

如显示的数据类似于:

PID TTY          TIME CMD
    1 ?        00:00:02 systemd

若显示systemd则为systemd,显示init则为Upstart。

在第一个进程启动之后,这个进程负责启动其它设置了开机自启动的进程。这就带出了一个概念,这些开机自启或者不自启的信息存放在哪里?

在Ubuntu系统中,通过SysV管理的进程启动信息放在/etc/init.d/文件夹中,里面的文件实际上是一些shell脚本,运行这些脚本就能启动或停止这些进程。而它对应的管理工具就是update-rc.d命令。
例如要启动nginx服务,可以通过sudo update-rc.d nginx enable实现。

通过Upstart管理的进程启动信息放在/etc/init文件夹中,其中都是.conf后缀的配置文件,与其对应的命令行管理工具是initctl。我们可以通过在/etc/init中编写相应的配置文件达到启动服务的目的。

通过systemd管理的进程启动信息放在/etc/systemd/system/lib/systemd/system/var/lib/systemd 几个文件夹中,例如通过命令locate nginx.service就会得到以下的位置信息:

/etc/systemd/system/multi-user.target.wants/nginx.service
/lib/systemd/system/nginx.service
/var/lib/systemd/deb-systemd-helper-enabled/nginx.service.dsh-also
/var/lib/systemd/deb-systemd-helper-enabled/multi-user.target.wants/nginx.service

配套的命令行工具是systemctl。可以通过命令 sudo systemctl enable nginx.service 将服务加到开机自启动中。需要注意的是如果不是软件安装时生成的.service文件,而是自己在上述位置写相应的文件的话,需要使用systemctl daemon-reload命令重新加载新的脚本才能使用。

另一个有用的命令是service,它兼容了update-rc.dinitctl命令的功能,两种启动方式都能使用。常用命令例如service nginx status

每台Linux服务器只能有一个系统初始化软件,从历史上说先有SysV,到Upstart,再到systemd。比较新版的Linux发行版很多都以systemd作为初始化管理软件。

systemd是在Ubuntu15.04才开始作为默认初始化程序的。

参考:
https://www.techforgeek.info/enable_disable_service_on_ubuntu.html
https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1416728
https://segmentfault.com/a/1190000009723940
https://stackoverflow.com/questions/7646972/nginx-invalid-pid-number
https://gist.github.com/AJMaxwell/f6793605068813aae888216b02364d85
http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章