SMF 里程碑(milestone)

SMF 里程碑是聚合多个服务并描述系统特定状态的服务。
其中一个里程碑(milestone)代表运行级别。
列出所有里程碑:

# svcs milestone*
STATE          STIME    FMRI
online         Jun_30   svc:/milestone/unconfig:default
online         Jun_30   svc:/milestone/config:default
online         Jun_30   svc:/milestone/devices:default
online         Jun_30   svc:/milestone/network:default
online         Jun_30   svc:/milestone/single-user:default
online         Jun_30   svc:/milestone/name-services:default
online         Jun_30   svc:/milestone/self-assembly-complete:default
online         Jun_30   svc:/milestone/multi-user:default
online         Jun_30   svc:/milestone/multi-user-server:default

检索服务配置属性

任何服务都会有多个与之关联的属性。
列出服务的属性值的语法是:

# svcprop -p [property] [service]

例如,要显示启动 cron 守护进程的 shell 脚本:

# svcprop -p start/exec system/cron
/lib/svc/method/svc-cron

SMF 命令

用于管理服务和进行配置更改的不同命令是:

svcs显示有关服务的信息
svcadm管理服务实例的状态
svcprop检索服务配置属性
svccfg导入、导出和修改服务配置

配置文件和目录

用于管理/排除故障和配置 SMF 的文件和目录是:

/etc/svc/repository.dbSMF的实际数据库
/etc/svc/volatile早期启动问题的日志
/lib/svc/bin/svc.startd主重启守护进程
/lib/svc/bin/svc.configd存储库守护进程
/var/svc/manifest/system服务 XML 文件
/lib/svc/method启动shell脚本
/var/svc/log服务日志文件存储在这里

服务依赖

服务可能依赖于其他服务。
除非这些服务不在线,否则依赖的服务不会启动。

  1. 检查依赖服务(我依赖的服务)
# svcs -d /system/filesystem/local
STATE          STIME    FMRI
online         20:08:17 svc:/system/filesystem/minimal:default
online         20:08:19 svc:/milestone/single-user:default
  1. 检查哪些服务依赖于特定服务(依赖于我的服务):
# svcs -D /system/filesystem/local
online         20:08:19 svc:/network/shares/group:default
online         20:08:19 svc:/system/cron:default
online         20:08:19 svc:/application/opengl/ogl-select:default
online         20:08:20 svc:/network/nfs/status:default
......

服务的组成部分

大多数服务由 4 个组件组成。
考虑 cron 服务的例子:

XML file/var/svc/manifest/system/cron.xml
Daemon/usr/sbin/cron
FMRIsystem/cron(短格式)svc:/system/cron(长格式)svc:/system/cron:default(包括实例)
Log file/var/svc/log/system-cron:default.log

修改服务配置属性

可以使用 svccfg 命令的 3 种模式更改服务配置属性

* Interactive mode
* From a file that contains a series of subcommands
* Command line mode
# svccfg
svc:> select system/console-login
svc:/system/console-login> setprop ttymon/terminal_type = astring: vt100
svc:/system/console-login> quit

确保刷新或者清除(以防服务中断)服务以重新读取我们所做的配置更改。

# svcadm refresh system/console-login

获取有关服务的信息

  1. 列出所有服务(启用/禁用/维护):
# svcs -a
STATE STIME FMRI
legacy_run 17:54:51 lrc:/etc/rc3_d/S81volmgt
online 13:47:55 svc:/network/telnet:default
online 13:47:55 svc:/network/nfs/rquota:default
online 13:47:55 svc:/network/ftp:default
........
  1. 列出与每个服务实例关联的所有进程(如果有):
# svcs -p
online 13:47:45 svc:/system/sac:default
13:47:45 223 sac
13:47:45 227 ttymon
online 13:47:45 svc:/system/cron:default
13:47:45 226 cron
..........
  1. 列出有关服务的所有详细信息:
# svcs -l system/cron
fmri svc:/system/cron:default
name clock daemon
enabled true
state online
next_state none
state_time Thu Dec 30 13:47:45 2004
logfile /var/svc/log/system-cron:default.log
restarter svc:/system/svc/restarter:default
contract_id 41
dependency require_all/none svc:/system/filesystem/local (online)
dependency require_all/none svc:/milestone/name-services (online)
  1. 显示损坏的服务及其背后的原因:
# svcs -xv
svc:/application/print/server:default (LP print server)
State: disabled since Wed Mar 02 10:28:00 2005
Reason: Disabled by an administrator.
See: http://sun.com/msg/SMF-8000-05
See: man -M /usr/share/man -s 1M lpsched
Impact: 1 dependent service is not running:
svc:/application/print/rfc1179:default
Solaris 中服务管理工具 (SMF) 教程

服务管理工具(SMF-Service management facility)最初是在 Solaris 10 中引入的,用于管理系统和应用程序服务。
这取代了旧的 init 脚本和其他启动脚本。

更多: zhilu jiaocheng

SMF 服务状态

每个 SMF 服务都将具有下表中提到的状态之一。
使用 svcadm 命令可以更改状态。

状态说明
uninitialized所有服务的初始状态,直到 svc.startd 将它们移动到另一个状态
offline已启用但未运行
online启用并运行
maintenance由于某种原因坏了
disabled禁用实例
legacy-run不由 SMF 直接管理的服务

FMRI(故障管理资源标识符)

每个服务都有一个 FMRI,其中包括服务名称和实例名称。
例如 :

svc:/system/cron (longer form)
svc:/system/cron:default (include the instance)

服务和服务实例有什么区别
考虑 Web 服务。
配置为侦听端口 80 的特定 Web 服务器是 Web 服务的一个实例。
每个服务的第一个实例通常被标记为默认实例。
例如 cron 将具有默认实例 "svc:/system/cron:default" 。

服务启动/停止

现在我们已经查看了服务和服务的 FMRI,我们可以使用 svcadm 命令启用/禁用服务。
在线服务之前,请确保所有必需的依赖服务都在线。

命令说明
# svcadm enable [service]启用服务
# svcadm disable [service]禁用服务
# svcadm disable -t [service]暂时禁用服务直到下次重新启动
# svcadm clear [service]在维护模式下清除服务
# svcadm refresh [service]刷新服务重新读取配置文件。
日期:2020-09-17 00:15:24 来源:oir作者:oir