侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux service命令教程:全面解读service功能及应用(附案例详解和注意事项)

Linux service 命令介绍

service(服务)是一个用来启动或停止一个服务的命令,它通过运行一个初始化脚本来实现。初始化脚本通常位于 /etc/init.d 目录下,它们是一些用来控制系统服务的 shell 脚本。service 命令可以让您在一个尽可能可预测的环境中运行一个 System V init 脚本或 systemd 单元,它会移除大部分的环境变量,并将当前工作目录设置为 /。

Linux service 命令适用的 Linux 版本

service 命令适用于大多数使用 System V init 或 systemd 的 Linux 发行版,例如 Debian、Ubuntu、RedHat、CentOS、Fedora 等。如果您的 Linux 发行版使用了其他的服务管理工具,例如 upstart、runit、openrc 等,那么您可能需要使用不同的命令来启动或停止服务。您可以通过运行以下命令来检查您的 Linux 发行版使用了哪种服务管理工具:

[linux@bashcommandnotfound.cn ~]$ ps -p 1

这个命令会显示进程号为 1 的进程的信息,它通常是服务管理工具的进程。如果输出显示为 systemd,那么您可以使用 service 命令。如果输出显示为其他的名称,那么您可能需要查找相应的命令来管理服务。

Linux service 命令的基本语法

service 命令的基本语法如下:

service SCRIPT COMMAND [OPTIONS]

其中,SCRIPT 参数指定了一个 System V init 脚本的名称,它位于 /etc/init.d/SCRIPT,或者一个 systemd 单元的名称。如果存在一个与 /etc/init.d 下的脚本同名的 systemd 单元,那么 systemd 单元会优先于 init.d 脚本。COMMAND 参数指定了要传递给脚本或单元的命令,支持的命令取决于脚本或单元本身。OPTIONS 参数指定了一些可选的参数,它们会被原样传递给脚本或单元。对于 systemd 单元,start、stop、status 和 reload 命令会被转换为 systemctl 或 initctl 的等价命令。所有的脚本都应该至少支持 start 和 stop 命令。作为一个特殊的情况,如果 COMMAND 是 --full-restart,那么脚本会被运行两次,先是用 stop 命令,然后是用 start 命令。

service 命令还支持以下几种语法:

service --status-all

这个命令会按照字母顺序运行所有的 init 脚本,并使用 status 命令来检查它们的状态。状态是 [ + ] 表示服务正在运行,[ - ] 表示服务已经停止,[ ? ] 表示服务没有 status 命令。这个选项只会对 sysvinit 的服务有效。

service --help | -h | --version

这个命令会显示 service 命令的帮助信息或版本信息。

Linux service 命令的常用选项或参数说明

service 命令的常用选项或参数如下表所示:

选项或参数说明
start启动指定的服务
stop停止指定的服务
restart重启指定的服务
reload重新加载指定服务的配置文件
status显示指定服务的状态
--full-restart先停止再启动指定的服务
--status-all显示所有服务的状态
--help显示帮助信息
-h显示帮助信息
--version显示版本信息

Linux service 命令实例详解

下面是一些使用 service 命令的实例,它们可以帮助您更好地理解和使用这个命令。

实例1:启动 Apache 服务

如果您想要启动 Apache 服务,您可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sudo service httpd start

这个命令会运行 /etc/init.d/httpd 脚本,并传递 start 命令给它,从而启动 Apache 服务。如果您的 Linux 发行版使用了 systemd,那么这个命令会被转换为:

[linux@bashcommandnotfound.cn ~]$ sudo systemctl start httpd.service

这个命令会启动 httpd.service 单元,从而启动 Apache 服务。

实例2:停止 MySQL 服务

如果您想要停止 MySQL 服务,您可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sudo service mysqld stop

这个命令会运行 /etc/init.d/mysqld 脚本,并传递 stop 命令给它,从而停止 MySQL 服务。如果您的 Linux 发行版使用了 systemd,那么这个命令会被转换为:

[linux@bashcommandnotfound.cn ~]$ sudo systemctl stop mysqld.service

这个命令会停止 mysqld.service 单元,从而停止 MySQL 服务。

实例3:显示 SSH 服务的状态

如果您想要显示 SSH 服务的状态,您可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sudo service sshd status

这个命令会运行 /etc/init.d/sshd 脚本,并传递 status 命令给它,从而显示 SSH 服务的状态。如果您的 Linux 发行版使用了 systemd,那么这个命令会被转换为:

[linux@bashcommandnotfound.cn ~]$ sudo systemctl status sshd.service

这个命令会显示 sshd.service 单元的状态,从而显示 SSH 服务的状态。

实例4:重新加载 Nginx 服务的配置文件

如果您想要重新加载 Nginx 服务的配置文件,您可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sudo service nginx reload

这个命令会运行 /etc/init.d/nginx 脚本,并传递 reload 命令给它,从而重新加载 Nginx 服务的配置文件。如果您的 Linux 发行版使用了 systemd,那么这个命令会被转换为:

[linux@bashcommandnotfound.cn ~]$ sudo systemctl reload nginx.service

这个命令会重新加载 nginx.service 单元的配置文件,从而重新加载 Nginx 服务的配置文件。

实例5:先停止再启动 Cron 服务

如果您想要先停止再启动 Cron 服务,您可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sudo service cron --full-restart

这个命令会运行 /etc/init.d/cron 脚本,并传递 --full-restart 命令给它,从而先停止再启动 Cron 服务。如果您的 Linux 发行版使用了 systemd,那么这个命令会被转换为:

[linux@bashcommandnotfound.cn ~]$ sudo systemctl stop cron.service
[linux@bashcommandnotfound.cn ~]$ sudo systemctl start cron.service

这两个命令会先停止再启动 cron.service 单元,从而先停止再启动 Cron 服务。

实例6:显示所有服务的状态

如果您想要显示所有服务的状态,您可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sudo service --status-all

这个命令会按照字母顺序运行所有的 init 脚本,并使用 status 命令来检查它们的状态。状态是 [ + ] 表示服务正在运行,[ - ] 表示服务已经停止,[ ? ] 表示服务没有 status 命令。这个选项只会对 sysvinit 的服务有效。如果您想要显示 systemd 的服务的运行状态,您可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sudo systemctl list-units --type=service --all

这个命令会显示所有的 systemd 单元的运行状态,包括已加载、已激活、正在运行、已退出、已失败等状态。

实例7:显示 crond 服务的运行日志

如果您想要显示 crond 服务的运行日志,您可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sudo service crond status -l

这个命令会运行 /etc/init.d/crond 脚本,并传递 status -l 命令给它,从而显示 crond 服务的运行日志。如果您的 Linux 发行版使用了 systemd,那么这个命令会被转换为:

[linux@bashcommandnotfound.cn ~]$ sudo systemctl status crond.service -l

这个命令会显示 crond.service 单元的运行日志,从而显示 crond 服务的运行日志。

实例8:使用不同的运行级别启动或停止服务

如果您想要使用不同的运行级别来启动或停止服务,您可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sudo service network start 3
[linux@bashcommandnotfound.cn ~]$ sudo service network stop 5

这两个命令会运行 /etc/init.d/network 脚本,并传递 start 3 或 stop 5 命令给它,从而在运行级别 3 启动或运行级别 5 停止网络服务。如果您的 Linux 发行版使用了 systemd,那么这两个命令会被转换为:

[linux@bashcommandnotfound.cn ~]$ sudo systemctl isolate runlevel3.target
[linux@bashcommandnotfound.cn ~]$ sudo systemctl start network.service
[linux@bashcommandnotfound.cn ~]$ sudo systemctl isolate runlevel5.target
[linux@bashcommandnotfound.cn ~]$ sudo systemctl stop network.service

这四个命令会先切换到运行级别 3 或 5 对应的 systemd 目标,然后启动或停止 network.service 单元,从而在运行级别 3 启动或运行级别 5 停止网络服务。

实例9:显示所有服务的运行状态

如果您想要显示所有服务的运行状态,您可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sudo service --status-all

这个命令会按照字母顺序运行所有的 init 脚本,并使用 status 命令来检查它们的状态。状态是 [ + ] 表示服务正在运行,[ - ] 表示服务已经停止,[ ? ] 表示服务没有 status 命令。这个选项只会对 sysvinit 的服务有效。如果您想要显示 systemd 的服务的运行状态,您可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sudo systemctl list-units --type=service --all

这个命令会显示所有的 systemd 单元的运行状态,包括已加载、已激活、正在运行、已退出、已失败等状态。

实例10:显示 service 命令的帮助信息或版本信息

如果您想要显示 service 命令的帮助信息或版本信息,您可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ service --help
[linux@bashcommandnotfound.cn ~]$ service -h
[linux@bashcommandnotfound.cn ~]$ service --version

这些命令会显示 service 命令的用法、选项或版本号。

Linux service 命令的注意事项

在使用 service 命令时,您需要注意以下几点:

  • service 命令只能管理存放在 /etc/init.d 目录下的服务脚本,如果您想要管理其他位置的服务脚本,您需要使用绝对路径来指定。
  • service 命令在 CentOS 7 及以上的版本中已经被 systemctl 命令取代,虽然仍然可以使用,但是建议您使用 systemctl 命令来管理系统服务,它提供了更多的功能和选项。
  • service 命令在运行服务脚本时,会移除大部分的环境变量,并将当前工作目录设置为 /,这是为了保证服务脚本在一个可预测的环境中运行。如果您的服务脚本依赖于某些环境变量或工作目录,您需要在服务脚本中显式地设置它们。
  • service 命令支持的命令取决于服务脚本本身,不同的服务脚本可能支持不同的命令,您可以通过运行 service SCRIPT --help 来查看服务脚本支持的命令。
  • 如果您在运行 service 命令时遇到 bash: service: command not found 的错误,可能是因为您没有安装 service 命令所需的软件包,您可以根据您的 Linux 发行版使用相关命令来安装。
0

评论区