SMF(7) Standards, Environments, and Macros SMF(7)

NAME


smf - service management facility

DESCRIPTION


The Solaris service management facility defines a programming model for
providing persistently running applications called services. The facility
also provides the infrastructure in which to run services. A service can
represent a running application, the software state of a device, or a set
of other services. Services are represented in the framework by service
instance objects, which are children of service objects. Instance objects
can inherit or override the configuration of the parent service object,
which allows multiple service instances to share configuration
information. All service and instance objects are contained in a scope
that represents a collection of configuration information. The
configuration of the local Solaris instance is called the "localhost"
scope, and is the only currently supported scope.


Each service instance is named with a fault management resource
identifier (FMRI) with the scheme svc:. For example, the syslogd(8)
daemon started at system startup is the default service instance named:

svc://localhost/system/system-log:default
svc:/system/system-log:default
system/system-log:default


Many commands also allow FMRI abbreviations. See the svcs(1) man page for
one such example.


In the above example, 'default' is the name of the instance and
'system/system-log' is the service name. Service names can comprise
multiple components separated by slashes (/). All components, except the
last, compose the category of the service. Site-specific services should
be named with a category beginning with 'site'.


A service instance is either enabled or disabled. All services can be
enabled or disabled with the svcadm(8) command.


The list of managed service instances on a system can be displayed with
the svcs(1) command.

Dependencies


Service instances can have dependencies on a set of entities which can
include services and files. Dependencies govern when the service is
started and automatically stopped. When the dependencies of an enabled
service are not satisfied, the service is kept in the offline state. When
its dependencies are satisfied, the service is started. If the start is
successful, the service is transitioned to the online state.


Whether a dependency is satisfied is determined by its grouping:

require_all
Satisfied when all cited services are running (online or
degraded), or when all indicated files are present.


require_any
Satisfied when one of the cited services is running
(online or degraded), or when at least one of the
indicated files is present.


optional_all
Satisfied if the cited services are running (online or
degraded) or do not run without administrative action
(disabled, maintenance, not present, or offline waiting
for dependencies which do not start without
administrative action).


exclude_all
Satisfied when all of the cited services are disabled, in
the maintenance state, or when cited services or files
are not present.


Once running (online or degraded), if a service cited by a require_all,
require_any, or optional_all dependency is stopped or refreshed, the SMF
considers why the service was stopped and the restart_on attribute of the
dependency to decide whether to stop the service.

| restart_on value
event | none error restart refresh
-------------------+------------------------------
stop due to error | no yes yes yes
non-error stop | no no yes yes
refresh | no no no yes


A service is considered to have stopped due to an error if the service
has encountered a hardware error or a software error such as a core dump.
For exclude_all dependencies, the service is stopped if the cited service
is started and the restart_on attribute is not none.


The dependencies on a service can be listed with svcs(1) or svccfg(8),
and modified with svccfg(8).

Restarters


Each service is managed by a restarter. The master restarter,
svc.startd(8) manages states for the entire set of service instances and
their dependencies. The master restarter acts on behalf of its services
and on delegated restarters that can provide specific execution
environments for certain application classes. For instance, inetd(8) is a
delegated restarter that provides its service instances with an initial
environment composed of a network connection as input and output file
descriptors. Each instance delegated to inetd(8) is in the online state.
While the daemon of a particular instance might not be running, the
instance is available to run.


As dependencies are satisfied when instances move to the online state,
svc.startd(8) invokes start methods of other instances or directs the
delegated restarter to do so. These operations might overlap.


The current set of services and associated restarters can be examined
using svcs(1). A description of the common configuration used by all
restarters is given in smf_restarter(7).

Methods


Each service or service instance must define a set of methods that start,
stop, and, optionally, refresh the service. See smf_method(7) for a more
complete description of the method conventions for svc.startd(8) and
similar fork(2)-exec(2) restarters.


Administrative methods, such as for the capture of legacy configuration
information into the repository, are discussed on the svccfg(8) manual
page.


The methods for a service can be listed and modified using the svccfg(8)
command.

States


Each service instance is always in a well-defined state based on its
dependencies, the results of the execution of its methods, and its
potential contracts events. The following states are defined:

UNINITIALIZED
This is the initial state for all service instances.
Instances are moved to maintenance, offline, or a
disabled state upon evaluation by svc.startd(8) or the
appropriate restarter.


OFFLINE
The instance is enabled, but not yet running or
available to run. If restarter execution of the service
start method or the equivalent method is successful, the
instance moves to the online state. Failures might lead
to a degraded or maintenance state. Administrative
action can lead to the uninitialized state.


ONLINE
The instance is enabled and running or is available to
run. The specific nature of the online state is
application-model specific and is defined by the
restarter responsible for the service instance. Online
is the expected operating state for a properly
configured service with all dependencies satisfied.
Failures of the instance can lead to a degraded or
maintenance state. Failures of services on which the
instance depends can lead to offline or degraded states.


DEGRADED
The instance is enabled and running or available to run.
The instance, however, is functioning at a limited
capacity in comparison to normal operation. Failures of
the instance can lead to the maintenance state. Failures
of services on which the instance depends can lead to
offline or degraded states. Restoration of capacity
should result in a transition to the online state.


MAINTENANCE
The instance is enabled, but not able to run.
Administrative action (through svcadm clear) is required
to move the instance out of the maintenance state. The
maintenance state might be a temporarily reached state
if an administrative operation is underway.


DISABLED
The instance is disabled. Enabling the service results
in a transition to the offline state and eventually to
the online state with all dependencies satisfied.


LEGACY-RUN
This state represents a legacy instance that is not
managed by the service management facility. Instances in
this state have been started at some point, but might or
might not be running. Instances can only be observed
using the facility and are not transferred into other
states.


States can also have transitions that result in a return to the
originating state.

Properties and Property Groups


The dependencies, methods, delegated restarter, and instance state
mentioned above are represented as properties or property groups of the
service or service instance. A service or service instance has an
arbitrary number of property groups in which to store application data.
Using property groups in this way allows the configuration of the
application to derive the attributes that the repository provides for all
data in the facility. The application can also use the appropriate subset
of the service_bundle(5) DTD to represent its configuration data within
the framework.


Property lookups are composed. If a property group-property combination
is not found on the service instance, most commands and the high-level
interfaces of libscf(3LIB) search for the same property group-property
combination on the service that contains that instance. This allows
common configuration among service instances to be shared. Composition
can be viewed as an inheritance relationship between the service instance
and its parent service.


Properties are protected from modification by unauthorized processes. See
smf_security(7).

General Property Group


The general property group applies to all service instances. It includes
the following properties:

enabled (boolean)
Specifies whether the instance is enabled. If this
property is not present on an instance, SMF does not
tell the instance's restarter about the existence of
the restarter.


restarter (fmri)
The restarter for this service. See the Restarters
section for more information. If this property is
unset, the default system restarter is used.


Snapshots


Historical data about each instance in the repository is maintained by
the service management facility. This data is made available as read-only
snapshots for administrative inspection and rollback. The following set
of snapshot types might be available:

initial
Initial configuration of the instance created by the
administrator or produced during package installation.


last_import
Configuration as prescribed by the manifest of the service
that is taken during svccfg(8) import operation. This
snapshot provides a baseline for determining property
customization.


previous
Current configuration captured when an administrative undo
operation is performed.


running
The running configuration of the instance.


start
Configuration captured during a successful transition to
the online state.


The svccfg(8) command can be used to interact with snapshots.

Special Property Groups


Some property groups are marked as "non-persistent". These groups are not
backed up in snapshots and their content is cleared during system boot.
Such groups generally hold an active program state which does not need to
survive system restart.

Configuration Repository


The current state of each service instance, as well as the properties
associated with services and service instances, is stored in a system
repository managed by svc.configd(8). This repository is transactional
and able to provide previous versions of properties and property groups
associated with each service or service instance.


The repository for service management facility data is managed by
svc.configd(8).

Service Bundles, Manifests, and Profiles
The information associated with a service or service instance that is
stored in the configuration repository can be exported as XML-based
files. Such XML files, known as service bundles, are portable and
suitable for backup purposes. Service bundles are classified as one of
the following types:

manifests
Files that contain the complete set of properties associated
with a specific set of services or service instances.


profiles
Files that contain a set of service instances and values for
the enabled property (type boolean in the general property
group) on each instance.

Profiles can also contain configuration values for
properties in services and instances. Template elements
cannot be defined in a profile.


Service bundles can be imported or exported from a repository using the
svccfg(8) command. See service_bundle(5) for a description of the service
bundle file format with guidelines for authoring service bundles.


A service archive is an XML file that contains the description and
persistent properties of every service in the repository, excluding
transient properties such as service state. This service archive is
basically a 'svccfg export' for every service which is not limited to
named services.

Milestones


An smf milestone is a service that aggregates a multiple service
dependencies. Usually, a milestone does nothing useful itself, but
declares a specific state of system-readiness on which other services can
depend. One example is the name-services milestone, which simply depends
upon the currently enabled name services.

Legacy Startup Scripts


Startup programs in the /etc/rc?.d directories are executed as part of
the corresponding run-level milestone:

/etc/rcS.d
milestone/single-user:default


/etc/rc2.d
milestone/multi-user:default


/etc/rc3.d
milestone/multi-user-server:default


Execution of each program is represented as a reduced-functionality
service instance named by the program's path. These instances are held in
a special legacy-run state.


These instances do not have an enabled property (type boolean in the
general property group) and, generally, cannot be manipulated with the
svcadm(8) command. No error diagnosis or restart is done for these
programs.

SEE ALSO


svcs(1), exec(2), fork(2), strftime(3C), libscf(3LIB), contract(5),
service_bundle(5), smf_bootstrap(7), smf_method(7), smf_restarter(7),
smf_security(7), inetd(8), svc.configd(8), svc.startd(8), svcadm(8),
svccfg(8)

July 6, 2009 SMF(7)