这是一个关于在 Solaris 系统上改变运行级别(run level,也称为 init 状态)的详细说明。
在传统的 Unix System V(如 Solaris)中,运行级别定义了系统提供的一组特定服务。改变运行级别意味着停止当前级别的一组进程,并启动新级别定义的一组进程。
Solaris 常用的运行级别有:
init 0,然后如果硬件支持则切断电源。注意: 从 Solaris 10 开始,引入了 SMF(服务管理设施) 作为主要的服务管理框架,但传统的运行级别概念仍然存在并与 SMF 集成。
init 命令 (最直接的方法)
这是改变运行级别的标准命令。你需要 root 权限。
# 切换到运行级别 3(启动网络服务)
su - root
init 3
# 重启系统
init 6
# 关机
init 0
# 进入单用户维护模式
init s
# 或
init 1
重要提示: 直接执行 init 6 或 init 0 会立即执行操作。请确保已保存所有工作。
shutdown 命令 (更安全、更可控)
这是一个更友好、更安全的关机或重启方式,允许你广播警告信息并延迟执行。
# 立即关闭系统到运行级别 0(关机)
shutdown -i0 -g0 -y
# 在5分钟后重启系统(运行级别 6),并向所有登录用户发送警告信息
shutdown -i6 -g300 -y "系统将于5分钟后重启进行维护,请保存您的工作!"
# 进入单用户模式(运行级别 S)
shutdown -iS -g60 -y
-i: 指定目标运行级别(0, 1, S, 5, 6)。-g: 宽限期(grace period),以秒为单位。在采取行动前的等待时间。-y: 自动对提示回答 “yes”,用于脚本中。reboot, halt, poweroff 命令
这些是便捷命令,通常指向 shutdown 的链接。
reboot # 等同于 init 6 或 shutdown -i6 -g0 -y
halt # 停止系统,但可能不切断电源
poweroff # 停止系统并切断电源(如果支持)
who -r
输出示例:
run-level 3 Apr 10 10:30 3 0 S
这表示当前运行级别是 3。
虽然 init 命令仍然有效,但服务的启动和停止由 SMF 管理。运行级别转变实际上是通过 SMF 的“里程碑”(milestone)来触发的。
milestone/single-user:default -> 运行级别 S/1milestone/multi-user:default -> 运行级别 2milestone/multi-user-server:default -> 运行级别 3使用 svcadm 切换到里程碑:
# 切换到多用户带网络模式(相当于 init 3)
svcadm milestone -d milestone/multi-user-server:default
# 切换到单用户模式
svcadm milestone -d milestone/single-user:default
-d 选项指定目标里程碑。
系统的默认运行级别在 /etc/inittab 文件中定义(Solaris 10 之前),但在 Solaris 10+ 中,这个文件通常只包含一个指向 SMF 的条目。
对于现代 Solaris (10+):
默认运行级别由 SMF 的 milestone 决定。系统启动时会自动进入 milestone/multi-user-server:default(即运行级别 3)。
如果你想修改启动行为,通常不是修改一个简单的“默认级别”,而是通过启用或禁用特定服务,或者创建自定义的启动脚本来实现。
对于传统 Solaris (9 及之前):
编辑 /etc/inittab,找到类似下面的一行:
is:3:initdefault:
将数字 3 改为你想要的默认运行级别(例如 2 或 s),然后重启系统生效。修改此文件需格外小心。
| 你的目的 | 推荐命令 | 说明 |
|---|---|---|
| 正常重启 | init 6 或 reboot |
快速直接 |
| 正常关机 | init 0 或 poweroff |
快速直接 |
| 计划性关机/重启 | shutdown -i6 -g300 -y "消息" |
给用户警告时间,最安全 |
| 进入单用户维护模式 | init s |
用于修复系统 |
| 返回多用户带网络模式 | init 3 或 exit (从单用户) |
从单用户模式退出时通常会自动到级别 3 |
| 查看当前级别 | who -r |
|
| (Solaris 10+) 使用 SMF 切换 | svcadm milestone |
更符合现代 Solaris 管理哲学 |
警告:
init 0, init 6, init s)会影响所有用户和服务。