欢迎光临天津华金科技
马上发布信息
详情描述
改变Solaris 系统运行级别 init

这是一个关于在 Solaris 系统上改变运行级别(run level,也称为 init 状态)的详细说明。

核心概念:运行级别

在传统的 Unix System V(如 Solaris)中,运行级别定义了系统提供的一组特定服务。改变运行级别意味着停止当前级别的一组进程,并启动新级别定义的一组进程。

Solaris 常用的运行级别有:

  • 0: 关机状态。用于安全关闭系统电源。
  • 1S: 单用户(管理)模式。只有 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 6init 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 改为你想要的默认运行级别(例如 2s),然后重启系统生效。修改此文件需格外小心。

总结与最佳实践

你的目的 推荐命令 说明
正常重启 init 6reboot 快速直接
正常关机 init 0poweroff 快速直接
计划性关机/重启 shutdown -i6 -g300 -y "消息" 给用户警告时间,最安全
进入单用户维护模式 init s 用于修复系统
返回多用户带网络模式 init 3exit (从单用户) 从单用户模式退出时通常会自动到级别 3
查看当前级别 who -r
(Solaris 10+) 使用 SMF 切换 svcadm milestone 更符合现代 Solaris 管理哲学

警告

  • 改变运行级别(尤其是 init 0, init 6, init s)会影响所有用户和服务。
  • 在生产环境中操作前,务必通知用户。
  • 在单用户模式下,你是唯一的用户,拥有完全控制权,操作要谨慎。