前言

今天对前端服务器进行迁移,本来前端服务器就一台,都是放置前端静态文件的地方,应该是比较简单的。唯一的问题是由于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

最新文章

  1. 从零开始学 Java - Spring MVC 实现跨域资源 CORS 请求
  2. 微信开发中遇到“当前页面的url未注册”问题
  3. Django_collections01
  4. authorization配置
  5. iOS7 UI兼容 导航栏按钮边框 UINavigationItem left and right padding
  6. insert当 sql语句里面有变量 为字符类型的时候 要3个单引号
  7. .NET 并行(多核)编程系列之五 Task执行和异常处理
  8. OCP读书笔记(24) - 题库(ExamD)
  9. Handlebars模板引擎之上手
  10. WEB前端:浏览器(IE+Chrome+Firefox)常见兼容问题处理--02
  11. centos 批量杀死进程
  12. char/varchar/nvarchar的区别
  13. [Spark][Python]PageRank 程序
  14. Ubuntu14.04下安装MATLAB后,通过命令行打开其图形界面
  15. 解读Secondary NameNode的功能
  16. HTTP请求中的Keep-Alive模式详解
  17. nodejs图片裁剪、缩放、水印
  18. 22、redis中数据库默认是多少个db 及作用?
  19. CentOS7.5安裝配置多协议下载器Aria2
  20. 捅伊朗黑客PP — 后台登陆POST+错误回显 注入

热门文章

  1. Ubuntu 和 Windows 之间进行远程访问和文件互传
  2. DFS(4)——hdu1010Tempter of the Bone
  3. VS2015中常用快捷键的修改推荐
  4. docker/qemu中是如何对设备管理的
  5. spring笔记(三)
  6. js表单验证工具包
  7. Luogu3960 NOIP2017列队(splay/线段树)
  8. hdu 1133 Buy the Ticket (大数+递推)
  9. 国内各运营商(ISP)IP段表
  10. BZOJ2286 [Sdoi2011]消耗战 【虚树 + 树形Dp】