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 -dFMRI: Lists dependencies for FMRI.svcs -DFMRI: Lists dependents for FMRI.svcs -lFMRI: Provides a long listing of information about FMRI; includes dependency informationsvcs -pFMRI: 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 clearFMRI: Clear faults for FMRI.svcadm disableFMRI: Disable FMRI.svcadm enableFMRI: Enable FMRI.svcadm refreshFMRI: Force FMRI to read config file.svcadm restartFMRI: 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 -sFMRIsetenvENV_VARIABLE value: Set an environment variable for FMRI. Follow by svcadm refresh and restart commands.
inetadm
inetadm -lFMRI: Displays properties for FMRI.inetadm -mFMRIproperty_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 logfileoutput, and runsvcs -xv FMRI - If the problem has been resolved, clear the fault with 
svcadm clear FMRI - Check for service dependencies with 
svcs -d FMRIThe output fromsvcs -ldistinguishes between optional and mandatory dependencies. - Check the startup properties with 
svcprop -p start FMRIThe 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.outto the beginning of thestartorexecstatement with ansvccfg -sstatement. 
No comments:
Post a Comment