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 发行版使用相关命令来安装。
评论区