• 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

  • 相关阅读:
    哈希算法原理和一致性哈希算法
    负载均衡之轮循算法
    Mybatis的使用
    Spring与SpringMVC的整合
    编程式事务与声明式事务
    八大排序方法及对Arrays类的排序实现探讨
    单例模式的线程安全性
    HotSpot对象的创建及内存布局
    逃逸分析、栈上分配、标量替换、同步替换
    java编译器和解释器
  • 原文地址:https://www.cnblogs.com/zhangjpn/p/9175568.html
Copyright © 2020-2023  润新知