Linux shutdown command
The shutdown command brings the system down in a secure way. All logged-in users are notified that the system is going down, and login operations are blocked. It is possible to shut the system down immediately, or after a specified delay.
All processes are first notified that the system is going down by the signal SIGTERM. This gives programs like vi time to save the file being edited, mail and news processing programs a chance to exit cleanly, etc.
shutdown does its job by signalling the init process, asking it to change the runlevel. Runlevel 0 is used to halt the system, runlevel 6 is used to reboot the system, and runlevel 1 is used to put the system into a state where administrative tasks can be performed (single-user mode). Runlevel 1 is the default, unless the -h or -r options are specified.
Your system may have a different set of options for the shutdown command; check your documentation for details.
shutdown [-akrhPHfFnc] [-t sec] time [message]
|-a||Control access to the shutdown command using the control access file /etc/shutdown.allow. See Access Control below for more information.|
|-k||Do not shut down, but send the warning messages as if the shutdown were real.|
|-r||Reboot after shutdown.|
|-h||Instructs the system to shut down and then halt.|
|-P||Instructs the system to shut down and then power down.|
|-H||If -h is also specified, this option instructs the system to drop into boot monitor on systems that support it.|
|-f||Skip fsck after reboot.|
|-F||Force fsck after reboot.|
|-n||Don't call init to do the shutdown of processes; instruct shutdown to do that itself.
The use of this option is discouraged, and its results are not always predictable.
|-c||Cancel a pending shutdown. (This does not apply to "shutdown now", which does not wait before shutting down.) With this option, it is not possible to give the time argument, but you can still specify an explanatory message that will be sent to all users.|
|-t sec||Tell init to wait sec seconds between sending processes the warning and the kill signal, before changing to another runlevel.|
|time||The time argument specifies when to perform the shutdown operation.
The time can be formatted in different ways:
First, it can be an absolute time in the format hh:mm, in which hh is the hour (1 or 2 digits, from 0 to 23) and mm is the minute of the hour (in two digits).
Second, it can be in the format +m, in which m is the number of minutes to wait.
In addition, the word now is the same as specifying +0; it shuts the system down immediately.
|message||A message to be sent to all users, along with the standard shutdown notification.|
If a shutdown is scheduled for the future, it will create the advisory file /etc/nologin which causes programs such as login not to allow new user logins. This file is created five minutes before the shutdown sequence starts. shutdown removes this file if it is stopped before it can signal init (i.e. it is cancelled or something goes wrong). It also removes it before calling init to change the runlevel.
The -f flag means "reboot fast". This only creates an advisory file /fastboot which can be tested by the system when it comes up again. The system boot rc file ("rc" stands for "runcom", which is short for "run commands") can test if this file is present, and decide not to run fsck since the system has been shut down in the proper way. After that, the boot process should remove /fastboot.
The -F flag means "force fsck". This only creates an advisory file /forcefsck which can be tested by the system when it comes up again. The boot rc file can test if this file is present, and decide to run fsck with a special "force" flag so that even properly unmounted file systems get checked. After that, the boot process should remove /forcefsck.
shutdown can be called from init when the Ctrl+Alt+Del key combination is pressed, if there exists an appropriate entry in /etc/inittab. This would mean that everyone who has physical access to the console keyboard can shut the system down, however.
To prevent this, shutdown can check to see if an authorized user is logged in. If shutdown is called with the -a argument (add this to the invocation of shutdown in /etc/inittab), it checks to see if the file /etc/shutdown.allow is present. It then compares the login names in that file with the list of people that are logged in on a virtual console (from /var/run/utmp). Only if one of those authorized users or root is logged in, it will proceed. Otherwise, it will write the message
shutdown: no authorized users logged in
...to the (physical) system console. The format of /etc/shutdown.allow is one user name per line. Empty lines and comment lines (prefixed by a #) are allowed. Currently there is a limit of 32 users in this file.
Note that if /etc/shutdown.allow is not present, the -a argument is ignored.
Halting vs. Powering Off
The -H option just sets the init environment variable INIT_HALT to HALT, and the -P option just sets that variable to POWEROFF. The shutdown script that calls halt as the last thing in the shutdown sequence should check these environment variables and call halt with the right options for these options to actually have any effect.
Schedule the system to shut down at 8 A.M.
Schedule the system to shut down at 8 P.M.
shutdown +15 "Upgrading hardware, downtime should be minimal"
Schedule the system to shut down in fifteen minutes. Along with the normal message alerting users that the system is shutting down, they will be given the descriptive message about a hardware upgrade.
Bring down the system immediately.
shutdown -r now
Bring down the system immediately, and automatically reboot it.
shutdown -P now
Bring down the system immediately, and automatically power off the system.