管理服务和守护程序
了解SysV-System V,Upstart和Systemd。使用initctl命令。使用service命令。使用systemctl命令来启动,停止,列出服务。
初始化过程
Linux系统上的init进程通常被称为所有进程的父进程。init
进程将始终具有1
(pid为1)的进程ID,它是系统上的内核启动的第一个进程。init是初始化的缩写,用于启动所有其他进程和默认运行级别。随着时间的推移,许多发行版已采用System V标准来管理服务,但是,其他发行版已移至Systemd
或Upstart
。
SysV-系统V
如果您的Linux发行版使用SysV
标准,则init将检查一个名为/etc/inittab
的文件。该文件包含系统应在其下启动的默认运行级别。例如,id:3:initdefault:
将自动启动运行级别3目录结构中的所有脚本。
运行级别1-单用户模式
运行级别2-与运行级别3相同,但没有NFS
运行级别3-多用户和联网模式
运行级别4-未使用的
运行级别5-与运行级别3,但带有图形桌面(X窗口系统)
运行System V
初始化脚本
作为管理员,您经常需要停止,启动,重新启动或重新加载特定的服务/守护程序。为此,我们使用一个名为service
的命令。该命令允许您执行通常位于/etc/init.d
目录中的System V
脚本。除了能够启动和停止服务之外,我们还可以查看当前状态。
service命令示例
状态检查
查看sshd
守护程序的当前状态
[root@centos etc]# service sshd status openssh-daemon (pid 1599) is running...
所有进程的状态检查
[root@centos ~]# service --status-all abrt-ccpp hook is installed abrtd (pid 1708) is running... abrt-dump-oops (pid 1716) is running... acpid (pid 1487) is running... atd (pid 1740) is running...
停止某个服务
停止sshd
守护程序
[root@centos etc]# service sshd stop Stopping sshd: [ OK ] [root@centos etc]# service sshd status openssh-daemon is stopped
启动某个服务
[root@centos etc]# service sshd start Starting sshd: [ OK ]
重启服务
[root@centos etc]# service sshd restart Stopping sshd: [ OK ] Starting sshd: [ OK ]
重新加载配置
[root@centos etc]# service sshd reload Reloading sshd: [ OK ]
Upstart
Upstart是基于事件的init
守护程序的替代。Upstart由一家知名公司的前雇员撰写,该公司为我们提供了Ubuntu(Canonical)。Upstart的想法是摆脱传统的启动过程,在传统的启动过程中,必须先完成已启动的任务,然后才能开始下一个任务。Upstart是一个事件驱动的系统,允许它异步响应系统事件。Upstart负责在启动和关闭时启动和停止服务和任务。它还积极监视这些服务和任务。Upstart还能够运行sysvinit脚本而无需进行修改。各种发行版包括Upstart来替代SystemV。这些发行版包括RHEL,CentOS和Fedora。但是,许多这样的系统现在已移至系统化
如前所述,我们可以在System V下使用service
命令控制服务/守护程序,但是在Upstart下,我们使用了另一个命令。与Upstart一起使用的命令是initctl
。该命令允许您与init守护程序进行通信。
以下是使用中的initctl
命令的一些基本示例。
initctl命令示例
状态检查
root@john-desktop:~# initctl status cups cups start/running, process 672
停止服务
root@john-desktop:~# initctl stop cups cups stop/waiting
启动服务
root@john-desktop:~# initctl start cups cups start/running, process 3574
重启服务
root@john-desktop:~# initctl restart cups cups start/running, process 3606
重新加载配置
root@john-desktop:~# initctl reload cups
列出所有服务
root@john-desktop:~# initctl list avahi-daemon start/running, process 611 mountall-net stop/waiting nmbd stop/waiting passwd stop/waiting rc stop/waiting rsyslog start/running, process 601 tty4 start/running, process 1080
重新加载配置
此选项请求init守护程序重新加载其配置文件。此命令不会重新启动任何作业。
root@john-desktop:~# initctl reload-configuration cups
systemd
systemd是System V的另一个替代。systemd代表系统守护程序。它的名称故意是小写!systemd旨在更好地处理依赖关系,并具有在启动时并行处理更多工作的能力。systemd支持系统快照和系统状态还原,跟踪存储在所谓的cgroup
(与传统的PID
方法)不同的进程。现在,许多流行的Linux发行版都采用了systemd。Fedora,Mandriva,Mageia,Arch Linux。还计划将systemd包含在较新的RHEL(Red hat)版本中。
正如我们在System V
和Upstart
中所看到的,这两种类型都有自己独特的命令来控制服务。同样适用于systemd。在systemd下使用的命令是systemctl
。以下是一些systemctl
命令的一些基本功能的示例。
系统命令 | 描述 |
---|---|
systemctl start mytest.service | 启动指定服务 |
systemctl stop mytest.service | 停止指定的服务 |
systemctl status mytest.service | 查看指定服务的状态 |
systemctl list-unit-files --type = service | 列出可以启动或停止的已知服务 |
systemctl restart mytest.service | 重启指定的服务 |
systemctl reload mytest.service | 如果支持,将重新加载配置文件 |
systemctl enable mytest.service | 启用服务,相当于chkconfig mytest on |
systemctl disable mytest.service | 禁用服务,相当于chkconfig mytest off |
systemctl is-enabled mytest.service | 检查当前运行级别服务是否启用 |