Basic Commands
The basic commands for managing services under SMF
(Service Management Facility) control are
svcs
,
svccfg
and
svcadm
.
The man pages for these commands are
a good source of detailed information.
inetadm
can be used to monitor services under inetd
control.
Many commands require referencing the service identifier, also known as an FMRI.
svcs
svcs -a
: Lists all services currently installed, including their state.svcs -d
FMRI: Lists dependencies for FMRI.svcs -D
FMRI: Lists dependents for FMRI.svcs -l
FMRI: Provides a long listing of information about FMRI; includes dependency informationsvcs -p
FMRI: Shows relationships between services and processes.svcs -t
: This change is temporary (does not persist past a boot).svcs -x
: Explains why a service is not available.svcs -xv
: Verbose debugging information.
svcadm
svcadm clear
FMRI: Clear faults for FMRI.svcadm disable
FMRI: Disable FMRI.svcadm enable
FMRI: Enable FMRI.svcadm refresh
FMRI: Force FMRI to read config file.svcadm restart
FMRI: Restart FMRI.
To make configuration changes to a non-inetd service,
edit the configuration file, then enter the
svcadm restart
command.
svccfg
svccfg
: Enter interactive mode.svccfg -s
FMRIsetenv
ENV_VARIABLE value: Set an environment variable for FMRI. Follow by svcadm refresh and restart commands.
inetadm
inetadm -l
FMRI: Displays properties for FMRI.inetadm -m
FMRIproperty_name=
value: Set a property for FMRI.
In particular, the "exec" value for an inetd-controlled service is the command line executed for that service by SMF. It may be desirable, for example, to change this value to add logging or other command-line flags.
To convert an inetd.conf file to SMF format, run the command:
inetconv -i /etc/inet/inetd.conf
Service Identifiers
Services are identified by their FMRI. (This stands for
Fault Managed Resource Identifier.)
An example is:
svc:/system/system-log:default
Some commands do not require the full FMRI if there is no ambiguity.
Legacy init scripts have FMRIs starting with lrc. For example:
lrc:/etc/rcS_d/S35cacheos_sh
Converted inetd services have a syntax like one
of the following, depending on whether or not
they are rpc services:
svc:network/
service-name/protocol
svc:network/
rpc-service-name/rpc_protocol
SMF Service Starts
The svc.startd
daemon is the master process starter
and restarter for SMF. It tracks
service state and manages dependencies.
Services that are managed through init scripts can be
added to SMF via the inetconv
command. Such additions are only monitored for status,
but other SMF facilities may not work.
Maintenance
If a service is in the maintenance state, first
make sure that all associated processes have died:
svcs -p
FMRI
Next, (for all processes displayed by the above):
pkill -9
PID
Consult the appropriate logs in /var/svc/log
to
check any errors; perform any needed maintenance.
Restore the service:
svcadm clear
FMRI
Scripts
The scripts that implement the startups and shutdowns
are located in their usual place in /etc/init.d
for the
lrc
services, or in /lib/svc/method
for most of the other services.
Other locations may be specified for a particular service. To track down the script locations for a particular service, do something like the following:
# svccfg -s smtp
svc:/network/smtp> list
:properties
sendmail
svc:/network/smtp> select sendmail
svc:/network/smtp:sendmail> list
:properties
svc:/network/smtp:sendmail> listprop *exec
start/exec astring "/lib/svc/method/smtp-sendmail start"
stop/exec astring "/lib/svc/method/smtp-sendmail stop %{restarter/contract}"
refresh/exec astring "/lib/svc/method/smtp-sendmail refresh"
Boot Messages
Boot messages are much less verbose than previously.
To get verbose output, boot with the
boot -v
or
boot -m verbose
commands.
svcadm
can be used to change the run levels.
The FMRIs associated with the different run levels are:
- S:
milestone/single-user:default
- 2:
milestone/multi-user:default
- 3:
milestone/multi-user-server:default
who -r
SMF Profiles
SMF profiles are XML files in /var/svc/profile
which list sets of service instances which are enabled
and disabled.
Different SMF profiles can be used. They are stored in
/var/svc/profile
. To use a different
one, perform the following procedure:
svccfg apply /var/svc/profile/
desired_profile.xml
The local profile /var/svc/profile/site.xml
allows local customizations. This profile is applied after
the standard profiles.
To make a copy of the current profile for editing, run:
svccfg extract>
profile-file.xml
Service Configuration Repository
Stores persistent configuration information and SMF runtime data for services.
Each service's manifest is in an XML-formatted text
file located
in /var/svc/manifest
. The information
from the manifests is imported into the repository
through svccfg import
or during a reboot.
This is covered
in the svccfg
, svcprodp
,
service_bundle
and
svc.configd
man pages.
If the repository is corrupted, it can be restored
from an automatic backup using the
/lib/svc/bin/restore_repository
command.
The svcadm refresh; svc adm restart
command will
make a snapshot active. Automatic snapshots are
taken for initial (import of the manifest),
running (when service methods are executed)
and start (last successful start).
Revert to a Snapshot
The procedure to revert to a snapshot is the following:
Run svccfg in interactive mode:
svccfg
In the svc:>
prompt, select the desired
service with a full FMRI:
select
FMRI
List the available snapshots:
listsnap
Revert to the desired snapshot:
revert
desired_snapshot_label
Quit out of the svccfg interactive mode:
quit
Update the service configuration repository information:
svcadm refresh
FMRI
svcadm restart
FMRI
Boot Troubleshooting
To step through the SMF portion of the boot process,
start with:
boot -m milestone=none
Then step through the milestones for the different
boot levels:
svcadm milestone svc:/milestone/single-user:default
svcadm milestone svc:/milestone/multi-user:default
svcadm milestone svc:/milestone/multi-user-server:default
Several things should be examined if a service fails to start:
- Is the service in maintenance mode? (
svcs -l FMRI
) - If so, why? Check the log file specified in the
svcs -l FMRI | grep logfile
output, and runsvcs -xv FMRI
- If the problem has been resolved, clear the fault with
svcadm clear FMRI
- Check for service dependencies with
svcs -d FMRI
The output fromsvcs -l
distinguishes between optional and mandatory dependencies. - Check the startup properties with
svcprop -p start FMRI
The startup for the process can be trussed to get some visibility into where it is failing by inserting a truss into the start or exec statement for the service. To do this, just addtruss -f -a -o /path/service-truss.out
to the beginning of thestart
orexec
statement with ansvccfg -s
statement.
No comments:
Post a Comment