SysV 服务通常由 /etc/init.d/ 下的可执行脚本表示。脚本会根据自身实现和发行版约定接受 start、stop、restart 或 status 等操作。service 命令提供一个包装程序,在更受控的环境中运行指定脚本。
初始化 · 第 2 课
System V 服务
了解如何通过活动系统支持的包装程序检查和操作旧式 SysV 服务脚本。
发现服务与操作
先列出脚本名称:
$ ls -1 /etc/init.d/
某些实现还提供:
$ service --status-all
其中的方括号标记和退出状态取决于包装程序,脚本也可能报告未知状态。对于单个服务,应检查脚本的用法输出或文档,而不要假定每项操作都存在。
service 命令通常包装什么?
启动与停止
在真正由 SysV 管理的主机上,常见形式如下:
$ sudo service SERVICE_NAME start
$ sudo service SERVICE_NAME stop
只有识别服务、其依赖项、当前状态和运维影响后,才能替换占位符。从远程会话停止网络、远程访问、存储或身份验证服务,可能让你失去连接或破坏正在进行的工作。
直接形式 /etc/init.d/SERVICE_NAME ACTION 可能存在,但如果主机的活动管理器提供兼容功能,应使用面向管理器的命令,让它能够跟踪状态和依赖关系。
哪个命令请求停止 SysV 服务 peanut?
重新加载、重启与状态
restart 通常会停止再启动服务,因而造成中断。reload 可以请求服务在不完整重启的情况下重新读取配置,但只有脚本和守护进程支持时才有效。某些脚本还提供 force-reload,其后备行为由发行版定义。
任何重新加载或重启前都应验证配置;更改远程访问服务时保留第二条管理连接;之后应通过实际端点和日志验证服务,而不能只看“正在运行”状态。
$ sudo service SERVICE_NAME status
$ sudo service SERVICE_NAME reload
为什么不能假定 reload 等同于 restart?
运行时控制与启动启用
现在启动服务并不一定会让它在未来运行级别中自动启动。启动启用状态由运行级别链接表示,并通过 update-rc.d、chkconfig 或服务管理器兼容生成器等发行版专用工具管理。
在理解发行版依赖元数据和管理工具前,不要手动创建 S 和 K 链接;手动链接可能被覆盖或顺序错误。
service SERVICE start 一定会让服务在以后启动时自动运行吗?
课程已完成
你已完成 System V 服务
现在,你可以操作旧式服务,而不会混淆运行时控制和启动策略。
发现实际脚本及其支持的操作。
在包装程序语法中,把服务名称放在操作之前。
验证配置,并检查 reload 或 restart 的实际结果。
通过发行版工具管理未来运行级别的启用状态。