天津华金科技

改变Solaris 系统运行级别 init

2026-03-31 06:39:02 浏览次数:0
详细信息

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

核心概念:运行级别

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

Solaris 常用的运行级别有:

注意: 从 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
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)来触发的。

使用 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 管理哲学

警告

相关推荐