This chapter provides guidelines for shutting down and booting a system and information about run levels and boot files.
This is a list of the step-by-step instructions in this chapter.
This is a list of overview information in this chapter.
A system's run level (also known as an init state) defines what services and resources are available to users. A system can be in only one run level at a time.
The Solaris software environment has eight run levels, which are described in Table 6-1. The default run level is specified in the /etc/inittab file as run level 3.
Table 6-1 Solaris Run Levels
Display run level information by using the who -r command to determine a system's run level.
$ who -r |
Use the who -r command to determine a system's current run level for any level except run level 0.
$ who -r . run-level 3 Jun 10 09:56 3 0 S $ |
run level 3 |
Identifies the current run level. |
Jun 10 09:56 |
Identifies the date of last run level change. |
3 |
Is the current run level. |
0 |
Identifies the number of times at this run level since the last reboot. |
S |
Identifies the previous run level. |
When you boot the system or change run levels with the init or shutdown command, the init daemon starts processes by reading information from the /etc/inittab file. This file defines three important items for the init process:
The system's default run level
What processes to start, monitor, and restart if they terminate
What actions to be taken when the system enters a new run level
Each entry in the /etc/inittab file has the following fields:
id:rstate:action:process
Table 6-2 describes the fields in an inittab entry.
Table 6-2 Fields in the inittab File
Field |
Description |
---|---|
id |
A unique identifier for the entry. |
rstate |
A list of run levels to which this entry applies. |
action |
How the process specified in the process field is to be run. Possible values include: initdefault, sysinit, boot, bootwait, wait, and respawn. |
process |
The command to execute. |
The following example shows a default inittab file:
ap::sysinit:/sbin/autopush -f /etc/iu.ap ap::sysinit:/sbin/soconfig -f /etc/sock2path fs::sysinit:/sbin/rcS sysinit >/dev/console 2<>/dev/console </dev/console is:3:initdefault: p3:s1234:powerfail:/usr/sbin/shutdown -y -i5 -g0 >/dev/console 2<>/dev/console sS:s:wait:/sbin/rcS >/dev/console 2<>/dev/console </dev/console s0:0:wait:/sbin/rc0 >/dev/console 2<>/dev/console </dev/console s1:1:respawn:/sbin/rc1 >/dev/console 2<>/dev/console </dev/console s2:23:wait:/sbin/rc2 >/dev/console 2<>/dev/console </dev/console s3:3:wait:/sbin/rc3 >/dev/console 2<>/dev/console </dev/console s5:5:wait:/sbin/rc5 >/dev/console 2<>/dev/console </dev/console s6:6:wait:/sbin/rc6 >/dev/console 2<>/dev/console </dev/console fw:0:wait:/sbin/uadmin 2 0 >/dev/console 2<>/dev/console </dev/console of:5:wait:/sbin/uadmin 2 6 >/dev/console 2<>/dev/console </dev/console rb:6:wait:/sbin/uadmin 2 1 >/dev/console 2<>/dev/console </dev/console sc:234:respawn:/usr/lib/saf/sac -t 300 co:234:respawn:/usr/lib/saf/ttymon -g -h -p "`uname -n` console login: " -T sun -d /dev/console -l console -m ldterm,ttcompat |
The init process is started and reads the /etc/default/init file to set any environment variables. By default, only the TIMEZONE variable is set.
Then init reads the inittab file to do the following:
Identify the initdefault entry, which defines the default run level (3).
Execute any process entries that have sysinit in the action field so that any special initializations can take place before users login.
Execute any process entries that have 3 in the rstate field, which matches the default run level, 3.
See init(1M) for a detailed description of how the init process uses the inittab file.
Table 6-3 describes the key words used for run level 3's action field.
Table 6-3 Run Level 3 Action Key Word Descriptions
Key Word |
Starts the Specified Process ... |
---|---|
powerfail |
Only when the system receives a power fail signal. |
wait |
And waits for its termination. |
respawn |
If it does not exist. If the process already exists, continue scanning the inittab file. |
Table 6-4 describes the processes (or commands) executed at run level 3.
Table 6-4 Run Level 3 Command Descriptions
Command or Script Name |
Description |
---|---|
/usr/sbin/shutdown |
Shuts down the system. The init process runs the shutdown command only if the system has received a powerfail signal. |
/sbin/rcS |
Mounts and checks root (/), /usr, /var, and /var/adm file systems. |
/sbin/rc2 |
Starts the standard system processes, bringing the system up into run level 2 (multiuser mode). |
/sbin/rc3 |
Starts NFS resource sharing for run level 3. |
/usr/lib/saf/sac -t 30 |
Starts the port monitors and network access for UUCP. This process is restarted if it fails. |
/usr/lib/saf/ttymon -g -h -p "`uname -n` console login: " -T terminal_type -d /dev/console -l console |
Starts the ttymon process that monitors the console for login requests. This process is restarted if it fails. The terminal_type on a SPARC system is sun The terminal_type on a x86 system is AT386 |
The Solaris software environment provides a detailed series of run control (rc) scripts to control run level changes. Each run level has an associated rc script located in the /sbin directory:
rc0
rc1
rc2
rc3
rc5
rc6
rcS
For each rc script in the /sbin directory, there is a corresponding directory named /etc/rcn.d that contains scripts to perform various actions for that run level. For example, /etc/rc2.d contains files used to start and stop processes for run level 2.
# ls /etc/rc2.d K20spc@ S70uucp* S80lp* K60nfs.server* S71rpc* S80spc@ K76snmpdx* S71sysid.sys* S85power* K77dmi* S72autoinstall* S88sendmail* README S72inetsvc* S88utmpd* S01MOUNTFSYS* S73nfs.client* S89bdconfig@ S05RMTMPFILES* S74autofs* S91leoconfig* S20sysetup* S74syslog* S92rtvc-config* S21perf* S74xntpd* S92volmgt* S30sysid.net* S75cron* S93cacheos.finish* S47asppp* S76nscd* S99audit* S69inet* S80PRESERVE* S99dtlogin* |
The /etc/rcn.d scripts are always run in ASCII sort order. The scripts have names of the form:
[KS][0-9][0-9]*
Files beginning with K are run to terminate (kill) a system process. Files beginning with S are run to start a system process.
Run control scripts are also located in the /etc/init.d directory. These files are linked to corresponding run control scripts in the /etc/rcn.d directories.
The actions of each run control script are summarized in Table 6-5.
One advantage of having individual scripts for each run level is that you can run scripts in the /etc/init.d directory individually to turn off functionality without changing a system's run level.
Become superuser.
# /etc/init.d/filename stop |
Restart functionality.
# /etc/init.d/filename start |
Use the pgrep command to verify whether the service has been stopped or started.
# pgrep -f service |
Turn off NFS server functionality by typing:
# /etc/init.d/nfs.server stop # pgrep -f nfs # |
Restart the NFS services by typing:
# /etc/init.d/nfs.server start # pgrep -f nfs 141 143 245 247 # pgrep -f nfs -d, | xargs ps -fp root 141 1 40 Jul 31 ? 0:00 /usr/lib/nfs/statd root 143 1 80 Jul 31 ? 0:01 /usr/lib/nfs/lockd root 245 1 34 Jul 31 ? 0:00 /usr/lib/nfs/nfsd -a 16 root 247 1 80 Jul 31 ? 0:02 /usr/lib/nfs/mountd |
If you want to add a run control script to start and stop a service, copy the script into the /etc/init.d directory and create links in the rcn.d directory you want the service to start and stop.
See the README file in each /etc/rcn.d directory for more information on naming run control scripts. The procedure below describes how to add a run control script.
Become superuser.
Add the script to the /etc/init.d directory.
# cp filename /etc/init.d # chmod 0744 /etc/init.d/filename # chown root:sys /etc/init.d/filename |
Create links to the appropriate rcn.d directory.
# cd /etc/init.d # ln filename /etc/rc2.d/Snnfilename # ln filename /etc/rcn.d/Knnfilename |
Use the ls command to verify that the script has links in the specified directories.
# ls /etc/init.d/ /etc/rc2.d/ /etc/rcn.d/ |
# cp xyz /etc/init.d # cd /etc/init.d # ln xyz /etc/rc2.d/S100xyz # ln xyz /etc/rc0.d/K100xyz # ls /etc/init.d /etc/rc2.d /etc/rc0.d |
Disable a run control script by renaming it with a dot (.) at the beginning of the new file name. Files that begin with a dot are not executed. If you copy a file by adding a suffix to it, both files will be run.
Become superuser.
Rename the script by adding an underscore (_) to the beginning of the new file.
# cd /etc/rcn.d # mv filename _filename |
Verify the script has been renamed.
# ls # _filename |
The following example changes the S100datainit script name but saves the original script.
# cd /etc/rc2.d # mv S100datainit _S100datainit |
Script Name |
Description |
---|---|
/sbin/rc0 |
Performs the following tasks: |
|
|
Table 6-6 The /sbin/rc1 Script
Table 6-7 The /sbin/rc2 Script
Many of the system services and applications that are started at run level 2 depend on what software is installed on the system.
Table 6-9 The /sbin/rc5 and /sbin/rc6 Scripts
Script Name |
Description |
---|---|
/sbin/rc5 and /sbin/rc6 |
Runs the /etc/rc0.d/K* scripts to perform the following tasks: |
|
|
Table 6-10 The /sbin/rcS Script