菜鸟科技网

ubuntu service命令如何正确使用?

service 命令是用于运行 System V init 脚本的传统工具,在较新的 Ubuntu 版本(如 15.04 及以后)中,系统已经从 sysvinit 迁移到了 systemdservice 命令的行为和推荐用法也发生了一些变化。

ubuntu service命令如何正确使用?-图1
(图片来源网络,侵删)

service 命令是什么?

service 命令是一个统一的接口,用于控制系统服务,它允许你启动、停止、重启和检查一个服务的状态,而无需知道该服务的启动脚本具体存放在哪个位置(/etc/init.d/)。

systemd 时代,service 命令实际上是一个指向 systemctl 的“前端”或“兼容层”。


基本语法

service <服务名> <操作>
  • <服务名>: 你要控制的服务的名称。apache2, nginx, ssh, ufw
  • <操作>: 你要对服务执行的操作,常用操作包括:
    • start: 启动服务。
    • stop: 停止服务。
    • restart: 重启服务(先停止,再启动)。
    • reload: 重新加载服务的配置文件,而不中断服务进程(如果服务支持此操作)。
    • status: 查看服务的当前状态。
    • force-reload: 强制重新加载配置,类似于 restart,但会尽量保持连接。
    • status --fullstatus --no-pager: 查看更详细的状态信息。

常用示例

示例 1:启动、停止和重启服务

假设你要管理 Apache Web 服务器。

# 启动 apache2 服务
sudo service apache2 start
# 查看 apache2 服务的状态
sudo service apache2 status
# 输出示例:
# ● apache2.service - The Apache HTTP Server
#    Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
#    Active: active (running) since ... 
#      Docs: https://httpd.apache.org/docs/2.4/
#   Process: ... 
# Main PID: ... (apache2)
#    Tasks: ... (limit: ...)
#    Memory: ...
#    CGroup: /system.slice/apache2.service
#            ├─... /usr/sbin/apache2 -k start
#            ...
# 停止 apache2 服务
sudo service apache2 stop
# 再次查看状态,应该显示 "inactive (dead)"
sudo service apache2 status
# 重启 apache2 服务
sudo service apache2 restart

示例 2:重新加载配置

当你修改了服务的配置文件(如 Apache 的 apache2.conf),而不是重启整个服务,可以使用 reload 来让服务应用新配置。

ubuntu service命令如何正确使用?-图2
(图片来源网络,侵删)
# 修改了配置文件后,重新加载 apache2
sudo service apache2 reload

示例 3:查看所有可用的服务

虽然 service 命令本身不带列出所有服务的选项,但你可以通过列出 /etc/init.d/ 目录下的脚本来找到传统的 SysV 服务。

# 列出所有 SysV init 脚本(服务)
ls /etc/init.d/

对于 systemd 服务,你应该使用 systemctl 命令。


重要提醒:service vs systemctl

在 Ubuntu 16.04 及更新的版本中,强烈推荐使用 systemctl 命令来管理服务,因为它是 systemd 的原生工具,功能更强大、信息更详细。

systemctl 命令对比

功能 service 命令 systemctl 命令 说明
启动服务 sudo service nginx start sudo systemctl start nginx systemctl 是标准方式
停止服务 sudo service nginx stop sudo systemctl stop nginx systemctl 是标准方式
重启服务 sudo service nginx restart sudo systemctl restart nginx systemctl 是标准方式
重载配置 sudo service nginx reload sudo systemctl reload nginx systemctl 是标准方式
查看状态 sudo service nginx status sudo systemctl status nginx systemctl 提供更丰富的输出
启用开机自启 (无直接对应) sudo systemctl enable nginx systemctl 独有功能
禁用开机自启 (无直接对应) sudo systemctl disable nginx systemctl 独有功能
查看所有服务 ls /etc/init.d/ sudo systemctl list-units --type=service systemctl 功能更强大
查看服务详情 (无直接对应) sudo systemctl status nginx 显示进程、日志等详细信息

为什么推荐 systemctl

  1. 功能更全面systemctl 可以管理服务的“启用/禁用”(开机自启),而 service 命令不行。
  2. 信息更丰富systemctl status 不仅显示服务是否运行,还会显示其 Unit File 的位置、主进程 ID、最近的日志条目等,这对于排查问题非常有帮助。
  3. 是未来标准systemd 已经成为现代 Linux 发行版(包括 Ubuntu, CentOS, Debian, Fedora 等)的初始化系统标准。service 命令只是为了向后兼容而保留的。

常见错误及解决方法

错误 1:Failed to start service.service: Unit service.service not found

这个错误通常意味着你使用的服务名不正确,或者该服务不是通过 systemdSysV 管理的。

ubuntu service命令如何正确使用?-图3
(图片来源网络,侵删)

解决方法

  1. 检查服务名:使用 systemctl 列出所有服务,找到正确的名称。
    systemctl list-units --type=service --all | grep -i "关键词"

    查找与网络相关的服务:

    systemctl list-units --type=service --all | grep network
  2. 检查服务是否存在:对于 SysV 服务,检查 /etc/init.d/ 目录。
    ls /etc/init.d/ | grep "关键词"

错误 2:/etc/init.d/service: unrecognized service

这表示在 /etc/init.d/ 目录下找不到对应的脚本,或者该脚本已经过时。

解决方法: 这通常意味着该服务已经被 systemd 服务取代,你应该使用 systemctl 来管理它,并忘记 /etc/init.d/ 下的旧脚本。


特性 service 命令 systemctl 命令
系统 主要用于 SysVinitsystemd 下的兼容层 systemd 的原生工具
功能 基本的控制(启、停、重、查) 功能全面,包括启停、重载、状态、启用/禁用、依赖管理等
推荐度 不推荐,仅用于兼容旧脚本 强烈推荐,是现代 Ubuntu 的标准
示例 sudo service nginx start sudo systemctl start nginx

最佳实践

  • 对于日常管理,请始终使用 systemctl
  • 当你在网上找到的旧教程使用 service 命令时,可以放心地用 systemctl 替换它。
  • 只有当你确定某个服务只存在于 /etc/init.d/ 并且没有被 systemd 单元文件接管时,才考虑使用 service 命令,这种情况在现代 Ubuntu 中已经非常罕见了。
分享:
扫描分享到社交APP
上一篇
下一篇