service和systemctl是用于管理系统服务的两个命令行实用程序。这两个实用程序分别属于两个不同的init系统SysV和systemd。
在本指南中,我将讨论服务和系统ctl命令,以及它们在服务管理方面的不同之处。
在进一步讨论之前,让我们先了解两个流行的Linux init系统:System和Systemd。
系统V与系统D
Linux上的init系统是引导过程的关键部分。它是在系统启动时启动的第一个具有PID1的进程。然后,它启动inittab文件中存在的进程。System V也知道SysV和Sysd是流行的Linux init系统。
SysV是一个较旧的init系统,已成为较旧的Unix和Linux发行版的一部分。它使用位于/etc/init.d中的脚本管理系统服务。一些仍在使用SysV的Linux发行版包括Slackware、Gentoo和Antix Linux。
另一方面,systemd于2010年推出,并迅速被许多Linux发行版采用。systemd init系统通过. service文件管理服务。它现在是所有现代Linux发行版的一部分,包括Red Hat Enterprise Linux、CentOS、Amazon Linux、Fedora、Debian、Ubuntu以及基于这些操作系统的发行版。
与SysV相比,systemd更有效。它提供了更快的引导时间、高效的服务管理和依赖性处理。
两个init系统都提供了两个用于服务管理的命令行实用程序。
- 服务
- systemctl
在本指南的以下部分中,我将讨论这两个实用程序。
服务命令
SERVICE命令是一个脚本包装器,它运行位于/etc/init.d目录中的脚本。它是为管理SysV或System V init系统的服务而开发的。使用SysV作为init系统的Linux发行版使用SERVICE命令进行服务管理。
下面给出了使用service命令的一般语法。
服务[服务名称][操作]
要获取System V控制的服务的状态,请使用service命令和—status—all选项。
服务—所有状态
+表示服务正在运行,—表示服务处于非活动状态。
还可以通过提及服务名称来检查任何特定服务的当前状态。
service [service_name]状态
下面列出了一些其他有用的服务命令,如启动、停止和重新启动服务。
服务[服务名称]启动
服务[服务名称]停止
service [service_name] restart
此service命令提供管理服务的基本控制。大多数Linux发行版已经取代SysV作为init系统,但由于遗留的兼容性,这个命令仍然出现在许多最新的Linux发行版中。
SYSTEMCTL命令
使用systemctl命令,可以控制/lib/systemd/system和/etc/systemd/system目录中的服务。它是systemd的一个组件;在大多数当代Linux发行版中都可以找到init系统。
systemctl旨在提供对系统服务管理的更多控制。下面给出了使用systemctl命令的一般语法:
systemctl [选项][service_name]
要检查所有服务的状态,请使用以下命令。
systemctl list—units——type = service——all
对于特定的服务用途:
systemctl状态[service_name]
使用系统ctl对服务进行基本管理的命令如下:
systemctl enable [service_name]
系统ctl启动[服务名称]
systemctl stop [service_name]
systemctl disable [service_name]
系统ctl重新启动[服务名称]
当涉及到控制服务时,系统ctl命令超越了这一范围。下表包含一些高级系统ctl命令。
列表路径 | 列出内存中所有服务的路径 |
is—active [service_name] | 检查服务或单元是否正在运行 |
列表依赖[service_name] | 打印指定服务的依赖项列表 |
重置失败 | 重置因异常导致加载失败的服务 |
掩码[service_name] | 禁用该服务并使其无法启动 |
获取默认值 | 打印默认运行级别或目标 |
Set-Default[目标] | 设置默认运行级别或目标 |
系统运行 | 检查系统的运行状态 |
重新启动 | 重新启动系统 |
断电 | 关闭系统 |
为什么在Linux发行版中使用systemd init System仍然存在服务命令
service命令仍然是许多Linux发行版的一部分,因为它是一个包装器脚本,抽象了底层init系统,无论是SysV还是systemctl。例如,在Ubuntu上,service命令重定向到systemctl。
结论
服务和系统ctl是两个命令行实用程序,分别属于SysV和systemd init系统。尽管现代Linux发行版中的SERVICE命令已被替换,但由于其简单性和兼容性,它仍然是维护服务的关键工具。另一方面,系统ctl是当前所有Linux发行版的一部分,并为服务管理提供高级选项。