这是一个关于在 Solaris 系统上改变运行级别(run level,也称为 init 状态)的详细说明。
核心概念:运行级别
在传统的 Unix System V(如 Solaris)中,运行级别定义了系统提供的一组特定服务。改变运行级别意味着停止当前级别的一组进程,并启动新级别定义的一组进程。
Solaris 常用的运行级别有:
- 0: 关机状态。用于安全关闭系统电源。
- 1 或 S: 单用户(管理)模式。只有 root 文件系统被挂载,基本系统进程运行。用于系统维护、修复。
- 2: 多用户模式(无网络服务)。这是默认的非网络多用户状态。所有本地服务启动,但 NFS 等服务不启动。
- 3: 多用户模式(带网络服务)。标准的完全多用户操作状态。所有网络服务(NFS、共享等)都会启动。这是服务器通常的运行级别。
- 4: 用户自定义。通常未使用。
- 5: 关机并安全断电。在一些系统上会先执行
init 0,然后如果硬件支持则切断电源。
- 6: 重启。停止所有服务,然后重新启动系统。
注意: 从 Solaris 10 开始,引入了 SMF(服务管理设施) 作为主要的服务管理框架,但传统的运行级别概念仍然存在并与 SMF 集成。
改变运行级别的命令
1. init 命令 (最直接的方法)
这是改变运行级别的标准命令。你需要 root 权限。
# 切换到运行级别 3(启动网络服务)
su - root
init 3
# 重启系统
init 6
# 关机
init 0
# 进入单用户维护模式
init s
# 或
init 1
重要提示: 直接执行 init 6 或 init 0 会立即执行操作。请确保已保存所有工作。
2. 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”,用于脚本中。
3. 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。
SMF 时代的注意事项(Solaris 10 及以后)
虽然 init 命令仍然有效,但服务的启动和停止由 SMF 管理。运行级别转变实际上是通过 SMF 的“里程碑”(milestone)来触发的。
- 里程碑 是服务集合的快照,与传统运行级别对应:
milestone/single-user:default -> 运行级别 S/1
milestone/multi-user:default -> 运行级别 2
milestone/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)会影响所有用户和服务。
- 在生产环境中操作前,务必通知用户。
- 在单用户模式下,你是唯一的用户,拥有完全控制权,操作要谨慎。