ubuntu的service,update-rc.d和systemctl命令

Ubuntu服务相关命令(service, update-rc.d, systemctl)

本博客参考了网上的各种资料和man,以及<< How linux works >>一书部分内容

init基本说明


  1. 内核启动第一个用户空间进程是由init开始的,你可以在/sbin目录下找到init,它主要复制启动和终止系统中的基础服务进程.
  2. linux系统中主要的init版本有如下

    init类型 说明 识别
    Systemd 新出现的init,很多linux发行版都已经或者计划转向Systemd 如果你的系统目录文件中/usr/lib/systemd和/etc/systemd,说明你有systemd,例如我的ubuntu 17.10就有
    Upstart ubuntu曾经使用的init,但是现在已经转向了systemd 系统目录有/etc/init,而且其中有许多conf文件,说明你的系统有upstart(除非你的系统是debian7,那说明你使用的是System V init),同时,我发现我的ubuntu 17.10也有这个目录,我猜测可能是为了兼容(此处存疑问,现在的ubuntu的init确实是systemd)
    System V init 传统的init,大多数的linux发行版都会兼容 系统有/etc/inittab文件,说明你很可能是System V init

service 命令


  1. 说明:执行System V init 的脚本,其实service命令执行的脚本就是在/etc/init.d/下的.
  2. 命令简单用处

    • sercice SCRIPT COMMAND
      实际上,SCRIPT是在/etc/init.d/下的,而COMMAND可以是start,stop,status,restart,reload,它们的作用是显而易见的(例如开启ssh服务可以 sudo service ssh start)。

    • service --status-all会显示出所有系统服务列表,其中”+”代表服务正在运行,而”-“代表服务处于关闭状态,”?”代表根本没有状态这一说。(其实查看运行服务还可以用 ps aux | grep service_name查看进程情况;如果是网络服务,还可以查看端口的监听情况,执行 `netstat -tuln | grep service_name/port_number,例如可以执行 netstat -tuln | grep ftp查看端口状态,默认端口为21)

update-rc.d 命令


  1. 说明:安装或者移除 System-V init的脚本连接(可以理解为指向脚本的快捷方式,即 /etc/rc*runlevel*.d/NNname => /etc/init.d/name)。你可以通过runlevel命令查看当前的运行级别,runlevel的概念网上一大堆就不提及了。简单来说,假如我的机器开机默认会进入runlevel为5的空间(ubuntu图形界面),那么就会在开机后执行/etc/rc5.d/*下所有的脚本(这样描述有些误差,其实此目录下都是软链接,指向/etc/init.d/下相对应的脚本)。另外,你还会发现这些链接的命名规则很有意思,一般来说,K开头的链接是关闭这个服务,而S开头的才是启动这个服务。此时应该有疑问,为什么链接都是指向同一个脚本,但是功能确是截然相反?网上有人说是这两个字母给脚本传递了不同的参数,但其实这个过程怎么实现我还不是很清楚(可以cat一下/etc/init.d/rsyslog的内容,这个shell脚本思路还是很清晰的,先是定义了各种函数,然后通过参数$1运用case语句来调用不同的函数,此时你会发现 service serv_name COMMAND其实和 /etc/init.d/serv_name COMMAND是一样的)
  2. 简单来说,你可以通过此命令控制开机自启动服务。
    • 开机启动服务(建立软链接): update-rc.d foobar defaults
    • 移除所有软链接:update-rc.d foobar remove
    • 关闭开机启动服务:update-rc.d foobar disable
    • 重新开启开机启动服务:update-rc.d foobar enable

systemd命令


  1. 许多linux的distributions都已经转投systemd了,而ubuntu自从15.04版本以后都使用了systemd.
  2. 只介绍常见常用的命令:

    • 打开服务:sudo systemctl start foobar
    • 关闭服务:sudo systemctl stop foobar
    • 重启服务:sudo systemctl restart foobar
    • 不中断正常功能下重新加载服务:sudo systemctl reload foobar
    • 设置服务的开机自启动:sudo systemctl enable foobar
    • 关闭服务的开机自启动:sudo systemctl disable foobar
    • 查看活跃的单元:systemctl list-units
    • 查看某个服务的状态:systemctl status foobar

你可能感兴趣的:(Linux)