svcadm - 处理服务实例
/usr/sbin/svcadm [-v] enable [ -rt] [-s [-T timeout ]] {FMRI | pattern}...
/usr/sbin/svcadm [-v] disable [ -t] [-s [-T timeout]] { FMRI | pattern}...
/usr/sbin/svcadm [-v] restart [ -s [-T timeout]] { FMRI | pattern}...
/usr/sbin/svcadm [-v] refresh [ -s [-T timeout]] { FMRI | pattern}...
/usr/sbin/svcadm [-v] clear [ -s [-T timeout]] { FMRI | pattern}...
/usr/sbin/svcadm [-v] goals [-s [-T timeout]] [-g goal_FMRI ] {-c | FMRI ...}
/usr/sbin/svcadm [-v] mark [ -It] [-s [-T timeout ]] instance_state {FMRI | pattern}...
/usr/sbin/svcadm [-v] delegate [-s [-T timeout]] restarter_FMRI svc |inst_FMRI [ svc|inst_FMRI ... ]
/usr/sbin/svcadm [-v] milestone [ -d] [-s [-T timeout]] milestone_FMRI
svcadm 会发出请求,对服务管理工具中执行的服务执行操作(请参见 smf(7) 手册页)。针对某个服务的操作是由分配给它的服务重启程序代理执行的。缺省服务重启程序是 svc.startd。有关更多信息,请参见 svc.startd(8) 手册页。
支持以下选项:
将操作详细地列显到标准输出。
下面列出了在对服务实例的典型管理中使用的子命令。
对于接受一个或多个操作数的子命令,如果操作数指定了一个服务(而不是一个服务实例)且该服务仅有一个实例,则 svcadm 对该实例执行操作。如果某个缩写的 FMRI(故障管理资源标识符)或模式与多个服务相匹配,则显示一条警告消息并忽略该操作数。有关更多信息,请参见 smf(7) 手册页。
如果服务具有多个实例,svcadm 将返回非零退出状态。
启用由操作数指定的服务实例。对于每个服务实例,所分配的重启程序会尝试使其进入 online(联机)状态。此操作需要相应的权限来修改服务实例的 "general"(通用)属性组(请参见 smf_security(7))。
如果指定了 –r 选项,svcadm 将启用每个服务实例并递归启用其依赖项。
如果指定了 –s 选项,svcadm 将启用每个服务实例,然后等待每个服务实例进入 online(联机)或 degraded(降级)状态。如果 svcadm 确定服务不能在不经管理员干预的情况下达到这些状态,它会提早返回。
如果指定了 –t 选项,svcadm 会临时启用每个服务实例。临时启用仅会持续到重新引导之前。此操作需要相应的权限来修改服务实例的 "restarter_actions" 属性组(请参见 smf_security(7))。缺省情况下,enable 在重新引导后仍然有效。
如果与 –s 选项一起指定了 –T 选项,svcadm 将等待 timeout 秒以便同步操作完成。如果经过 timeout 秒后操作仍未完成,svcadm 将提前返回。
禁用由操作数指定的服务实例。对于每个服务实例,所分配的重启程序会尝试使其进入 disabled(禁用)状态。如果服务实例已禁用、但处于降级状态,则分配的重启程序将重新尝试转换到禁用状态。此操作需要相应的权限来修改服务实例的 "general"(通用)属性组(请参见 smf_security(7))。
如果指定了 –s 选项,svcadm 将禁用每个服务实例,然后等待每个服务实例进入 disabled(禁用)状态。如果 svcadm 确定服务不能在不经管理员干预的情况下达到此状态,它会提早返回。
如果指定了 –t 选项,svcadm 会临时禁用每个服务实例。临时禁用仅会持续到重新引导之前。此操作需要相应的权限来修改服务实例的 "restarter_actions" 属性组(请参见 smf_security(7))。缺省情况下,disable 在重新引导后仍然有效。
如果与 –s 选项一起指定了 –T 选项,svcadm 将等待 timeout 秒以便同步操作完成。如果经过 timeout 秒后操作仍未完成,svcadm 将提前返回。
请求重新启动由操作数指定的服务实例。此操作需要相应的权限来修改服务实例的 "restarter_actions" 属性组(请参见 smf_security(7))。大多数重启程序将重新启动服务操作实施为一个完整的服务 "stop"(停止)操作,后跟一个 "start"(启动)操作。
此子命令只能重新启动处于 online(联机)或 degraded(降级)状态的服务,因为这些状态是在 smf(7) 手册页中定义的。
使用 –s 选项时,直到每个服务实例达到 online(联机)、degraded(降级)或 maintenance(维护)状态之一后 svcadm 才会返回,但不用等到首先转换到某个中间状态。
如果与 –s 选项一起指定了 –T 选项,svcadm 将等待 timeout 秒以便同步操作完成。如果经过 timeout 秒后操作仍未完成,svcadm 将提前返回。
针对操作数指定的每个服务实例,请求所分配的重启程序使用来自当前配置的值更新该服务的运行配置快照。其中某些值是立即生效的(例如,依赖项更改)。其他值在服务下次 restart(重新启动)之前不会生效。有关更多信息,请参见重启程序和服务文档。
服务由 svc.startd(8) 管理时,如果存在请求服务重新读取自身配置的 refresh 方法,则将调用此方法。对于其他重启程序,请参见重启程序文档。
此操作需要相应的权限来修改服务实例的 "restarter_actions" 属性组(请参见 smf_security(7))。
–s 选项将导致 svcadm 一直等待,直到每个服务实例达到 online(联机)、maintenance(维护)或 degraded(降级)状态之一。如果任何实例在没有进一步管理操作的情况下无法转换到其中一个状态,svcadm 将提前返回。
如果与 –s 选项一起指定了 –T 选项,svcadm 将等待 timeout 秒以便同步操作完成。如果经过 timeout 秒后操作仍未完成,svcadm 将提前返回。
针对操作数指定的每个服务实例,如果它处于 maintenance(维护)状态,则向所分配的重启程序发出服务已修复的信号。如果实例处于 degraded(降级)状态,则请求所分配的重启程序将该服务更改为 online(联机)状态。如果实例处于 degraded(降级)状态且未启用,则请求所分配的重启程序将该服务更改为 disabled(禁用)状态。此操作需要相应的权限来修改服务实例的 "restarter_actions" 属性组。有关更多信息,请参见 smf_security(7) 手册页。
如果指定了 –s 选项,直到操作数指定的每个服务实例达到 online(联机)状态后 svcadm 才会返回。如果任何实例在没有进一步管理操作的情况下无法达到该状态,svcadm 将提前返回。
如果与 –s 选项一起指定了 –T 选项,svcadm 将等待 timeout 秒以便同步操作完成。如果经过 timeout 秒后操作仍未完成,svcadm 将提前返回。
将操作数中的每个 FMRI 设置为 goal_FMRI 的依赖项。如果省略 –g 选项,则子命令将对里程碑/目标服务进行操作。尝试在未设置为目标服务的服务上设置依赖项将失败。有关目标服务的介绍,请参见 smf(7) 手册页。
如果使用 –c 选项(而不是 FMRI),则将清除依赖项上的管理定制。依赖项将根据清单和配置文件层的分层结构恢复为在这些层提供的内容。如果在里程碑/目标中使用 –c 选项,则其依赖项将恢复为
svc:/milestone/multi-user-server:default
该命令定义的所有依赖项将具有分组 require_all 和 restart_on restart。有关更多信息,请参见 smf(7) 手册页。请注意,目标将覆盖里程碑/目标的现有依赖项。可以使用 svcs -d FMRI 命令查找里程碑/目标或任何目标服务的依赖项。
–s 选项将导致 svcadm 一直等待,直到通过同步刷新使新的依赖项集生效为止。如果刷新失败,svcadm 将提前返回。
如果与 –s 选项一起指定了 –T 选项,svcadm 将等待 timeout 秒以便同步操作完成。如果经过 timeout 秒后操作仍未完成,svcadm 将提前返回。
通常,不建议使里程碑/目标依赖于动态启用的服务。动态启用的服务将导致里程碑/目标在引导期间一直处于维护状态,直到由其他服务启用为止。为持久启用的服务设置里程碑/目标,或使用 svccfg(8) 命令将依赖性类型手动更改为 optional_all。
以下子命令用于服务部署、由较高级别的框架执行的服务管理,以及临时的管理操作。
将为给定的 inst_FMRI 分配的重启程序更改为由 restarter_FMRI 指定的重启程序。特殊标记 master 会将委托的重启程序设置为主重启程序,请参见 svc.startd(8)。特殊标记 reset 会通过删除重启程序定制将委托的重启程序设置回原始的、由文件提供支持的重启程序。重新委托需要在执行重新启动操作后才会生效。并非所有重启程序都支持相同的底层应用程序模型,因此,不是所有潜在的委托都会产生可正常工作的服务实例;请参见在操作中涉及的特定重启程序的手册页来确定兼容性。
如果重启程序不存在或者被禁用,则服务实例不会被委托,并且将返回一个错误。如果重启程序存在但处于脱机或维护状态,则实例会被委托,但可能无法转换回联机状态。将输出一条警告消息。
如果指定了 –s 选项,则 svcadm 会委托每个服务实例,然后等待每个服务实例进入联机状态(如果之前处于联机状态),或者等待常规/重启程序属性组或属性被更新。如果 svcadm 命令确定服务在没有管理员干预的情况下无法到达这些状态,则该命令会提前返回。
如果与 –s 选项一起指定了 –T 选项,svcadm 将等待 timeout 秒以便同步操作完成。如果经过 timeout 秒后操作仍未完成,svcadm 将提前返回。
如果 instance_state 为 "maintenance"(维护),则针对操作数指定的每个服务,svcadm 请求所分配的重启程序将该服务置于 maintenance(维护)状态。有关为每个重启程序采取的操作的详细描述,请参见svc.startd(8) 和 inetd(8)。
如果 instance_state 为 "degraded"(降级),则针对操作数指定的处于联机状态的服务,svcadm 请求分配给这些服务的重启程序将其置于 degraded(降级)状态。
如果指定了 –I 选项,该请求被标记为即时的。
–t 选项仅对维护请求有效。如果指定了此选项,该请求将被标记为临时的,它的效果仅会持续到下次重新引导之前。
如果指定了 –s 选项,直到每个服务实例达到 maintenance(维护)或 degraded(降级)状态后 svcadm 才会返回。
如果 milestone_FMRI 为关键字 "none",则将临时禁用除主重启程序 svc:/system/svc/restarter:default 以外的所有服务。
如果 milestone_FMRI 为关键字 "all",则将废除对所有服务的临时启用和禁用请求。
如果 milestone_FMRI 为下列值之一:
svc:/milestone/single-user:default svc:/milestone/multi-user:default svc:/milestone/multi-user-server:default
则将废除对指定的服务及其依赖的(直接或间接)的所有服务的临时启用和禁用请求。将临时禁用所有其他服务。
使用 "milestone" 子命令更改系统的当前里程碑将不会更改系统的当前运行级。要更改系统的运行级,请直接调用 /usr/sbin/init。
此操作需要相应的权限来修改 svc:/system/svc/restarter:default 服务实例的 "options_ovr" 属性组(请参见 smf_security(7) 手册页)。
如上所述,–d 选项会即时将里程碑更改为所需的里程碑。此外,它将使指定的里程碑成为缺省的引导里程碑,缺省的引导里程碑在重新引导后仍然有效。缺省的里程碑是由主重启程序 svc:/system/svc/restarter:default 中的 options/milestone 属性定义的。如果此属性不存在,缺省值为 "all"。此操作需要相应的权限来修改 svc:/system/svc/restarter:default 服务实例的 "options"(选项)属性组(请参见 smf_security(7) 手册页)。
如果与 –s 选项一起指定了 –T 选项,svcadm 将等待 timeout 秒以便同步操作完成。如果经过 timeout 秒后操作仍未完成,svcadm 将提前返回。
如果指定了 –s 选项,svcadm 将更改系统的里程碑,然后等待到指定里程碑的转换完成。如果任何需要转换到 online(联机)或 disabled(禁用)状态以达到里程碑的服务在没有管理员干预的情况下无法进行转换,svcadm 将提前返回。
支持下列操作数:
一个 FMRI,用于指定一个或多个实例。可以通过指定实例名称或指定服务名的后缀部分以缩写形式指定 FMRI。例如,对于以下 FMRI:
svc:/network/smtp:sendmail
下列各项都是有效的缩写:
sendmail :sendmail smtp smtp:sendmail network/smtp
而下列项则无效:
mail network network/smt
如果 FMRI 指定了一个服务,则命令将应用于该服务的所有实例。FMRI 的缩写形式不稳定,不应在脚本或其他永久性工具中使用。
服务实例的 FMRIs 根据 fnmatch(7) 描述的 "globbing"(通配)规则与之匹配的模式。如果该模式不以 "svc:" 开头,则会在其前面加上 "svc:/"。
如果某个缩写的 FMRI 或模式与多个服务相匹配,则显示一条警告消息并忽略该操作数。
如果提供了多个 FMRI 或模式参数,则不能对其处理顺序做出任何假设。如果对一个 FMRI 的操作可能会影响对其他 FMRI 的操作(例如具有某些依赖项关系),则应在单独的命令行中指定这些操作以强制执行排序。
如果与 –s 选项一起指定了 –T 选项,svcadm 将等待 timeout 秒以便同步操作完成。如果经过 timeout 秒后操作仍未完成,svcadm 将提前返回。
以下命令重新启动 NFS 服务器。缺省服务实例的完整 FMRI 为:svc:/network/nfs/server:default
不过,您可以将该完整的 FMRI 缩写为以下形式:
# svcadm restart nfs/server示例 2 禁用标准的 HTTP 服务器
以下命令禁用标准的 HTTP 服务器,其中使用了缩写的 FMRI:
$ svcadm disable http示例 3 启用实例及其依赖的实例
以下命令启用 foo:bar 实例及其依赖的所有实例:
$ svcadm enable -r foo:bar示例 4 以同步方式启用实例
以下命令启用 foo:bar 实例。在实例联机或 svcadm 断定该服务无法联机之前,此命令不会返回。
$ svcadm enable -s foo:bar示例 5 限制和恢复正在运行的服务
以下命令将正在运行的服务限制到单用户模式:
# svcadm milestone milestone/single-user
以下命令恢复正在运行的服务:
# svcadm milestone all
将返回以下退出值:
成功完成。
发生了致命错误。会在标准错误输出中显示一条或多条错误消息。
指定的命令行选项无效。
svcadm 断定由于它等待的服务实例本身存在某个问题,不经管理员干预该服务实例无法达到所需的状态。
svcadm 断定由于它等待的服务实例的依赖项存在某个问题,不经管理员干预该服务实例无法达到所需的状态。
svcadm 在等待服务实例时超时,该实例未达到所需的状态(尽管有达到的可能性)。
有关下列属性的说明,请参见 attributes(7):
|
交互式输出为 Uncommitted(未确定)。调用和非交互式输出为 Committed(已确定)。
svcprop(1)、svcs(1)、libscf(3LIB)、contract(5)、attributes(7)、smf(7)、smf_security(7)、inetd(8)、init(8)、svc.startd(8)、svccfg(8)
svcadm 等待服务及其依赖项更改状态时花费的时间量由其方法超时隐式限制。例如,如果某个服务使用的缺省重启程序的 start 方法挂起,则超时时间到期后,该服务将转换为 maintenance(维护)状态。svcadm 将认为该服务在不经管理员干预的情况下无法联机。
尝试以同步方式启用依赖于(直接或间接)某个文件的服务时,如果调用者不具备搜索包含某个文件的目录所需的特权,该尝试可能会失败且退出状态指出不满足依赖项。将来的 Solaris 发行版中可能会取消这一限制。