Linux init、service、systemctl 三者区别

一、daemon与服务(service)
简单说,你启动一个程序,这个程序提供你一些功能,那么这个程序就是daemon,程序运行后提供的功能就是service。
这个程序通常是后台运行的,开机自启动的,所以也叫守护进程。
比如:crontab提供的定时任务,crond是daemon,crond启动后提供的功能就是service。所以不需要去区分它们两个,基本上可以视作是说同一个东西,毕竟程序需启动后才能提供功能。

关于daemon的命名方式,一般会在原程序后面添加字母d,使用ps和top观察时就会发现很多后缀为d的daemon程序


二、管理服务
管理服务的方式有三种,分别是init、service、systemctl。

(一)System V init
历史上,Linux的启动一直采用init进程。
Init是linux启动的第一个进程。
Init是一个守护进程,它将持续运行,直到系统关闭。它是所有其他进程的直接或间接的父进程。
因为init的参数全在/etc/init.d目录下,所以使用init启动一个服务,应该这样做:
$ sudo /etc/init.d/nginx start

现在这种方式基本淘汰。

(二)service
通过查看man手册页可以得知,service是一个运行System V init的脚本命令。
所以service最终是去/etc/init.d目录下执行相关程序

使用service启动一个服务
$ service nginx start

可以理解成service就是init.d的一种实现方式。
所以这两者启动方式(或者是停止、重启)并没有什么区别。
$ sudo /etc/init.d/nginx start
// 等价于
$ service nginx start

但是这两种方式均有如下缺点:

  1. 启动时间长。init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。
  2. 启动脚本复杂。init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。


这种也基本淘汰。

(三)systemd
Systemd就是为了解决这些问题而诞生的。它包括System and Service Manager,为系统的启动和管理提供一套完整的解决方案。
Systemd是Linux系统中最新的初始化系统(init),它主要的设计目的是克服System V init固有的缺点,提高系统的启动速度。

根据Linux惯例,字母d是守护进程(daemon)的缩写。Systemd这个名字的含义,就是它要守护整个系统。
使用了Systemd,就不需要再用init了。Systemd取代了initd(Initd的PID是0)成为系统的第一个进程(Systemd的PID等于1),其他进程都是它的子进程。
Systemd的优点是功能强大,使用方便,缺点是体系庞大,非常复杂。

Systemd并不是一个命令,而是一组命令:
1.systemctl
systemctl是Systemd的主命令,用于管理系统。
(1)语法格式:
systemctl [OPTIONS...] COMMAND unit

(2)选项
选项有点多

使用systemctl --help查看

(3)command主要有:
start:启动unit
stop:关闭unit
restart:重启unit,亦即執行stop再start的意思
reload:不关闭unit的情況下,重新载入
enable:设置自启动
disable:取消自启动
status:查看状态
is-active:是否运行中
is-enabled:是否自启动
list-units [PATTERN...] List units currently in memory
list-dependencies [UNIT...] Recursively show units which are required or wanted by the units or by which those units are required or wanted

(4)unit
服务名:可以带.service,也可以不带

(5)示例
1)查看某个服务状态
systemctl status atd.service

atd.service - Job spooling tools
Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled)
Active: active (running) since Mon 2015-08-10 19:17:09 CST; 5h 42min ago
Main PID: 1350 (atd)
CGroup: /system.slice/atd.service
└─1350 /usr/sbin/atd -f
Aug 10 19:17:09 study.centos.vbird systemd[1]: Started Job spooling tools.

loaded后面的enable说明是自启动,disable说明是非自启动
active后面的active说明是运行中,inactive说明不在运行

2)启动某个服务
systemctl start atd.service

3)停止某个服务
systemctl stop atd.service

4)设置开机自启动
systemctl enable atd.service

5)取消自启动
systemctl disable atd.service


与以前的比较

功能 以前的命令 现在的命令
使某服务自启动 chkconfig httpd on systemctl enable httpd.service
使服务不自启动 chkconfig httpd off systemctl disable httpd.service
检查服务状态 service httpd status  systemctl status httpd.service
已启动的服务 chkconfig --list systemctl list-units --type=service
启动某服务 service httpd start systemctl start httpd.service
停止某服务 service httpd stop systemctl stop httpd.service
重启某服务 service httpd restart systemctl restart httpd.service


2.hostnamectl
hostnamectl命令用于查看当前主机的信息。

(1)显示当前主机信息
$ hostnamectl
(2)设置主机名
$ sudo hostnamectl set-hostname BoodeUbuntu

3.localectl
localectl命令用于查看本地化设置。

(1)查看本地化设置
$ localectl
(2)设置本地化参数。
$ sudo localectl set-locale LANG=en_GB.utf8
$ sudo localectl set-keymap en_GB

4.timedatectl
timedatectl命令用于查看当前时区设置。

(1)查看当前时区设置
$ timedatectl
(2)显示所有可用的时区
$ timedatectl list-timezones
(3)设置当前时区
$ sudo timedatectl set-timezone America/New_York
$ sudo timedatectl set-time YYYY-MM-DD
$ sudo timedatectl set-time HH:MM:SS

(四)总结

init是最初的进程管理方式
service是init的另一种实现
systemd则是一种取代initd的解决方案
其中systemctl是systemd的主命令,用于管理系统以及服务。

你可能感兴趣的:(linux,linux,服务器,运维)