Linux更新和查询命令chkconfig详细介绍

说实话,chkconfig在CentOS 6 中被大量使用,后来在CentOS 7 和8 中被systemd取代。
现在基本看不到了,但了解一下还是很不错的。
我负责一个小机房,所有的工作都得靠她来做。

你提到的七个Linux操作级别中,给我印象最深的是0和6 0表示关机,按理说没什么好说的,但是有一次系统半夜突然卡在了重启状态,就卡在6 和0之间了。
我担心极了,最后发现是init脚本有bug。
第6 步是重新启动。
按理说,按一下电源按钮就可以了,但我的一台机器很顽固。
我必须按住电源按钮5 秒才能强制关机,然后它会自动重新启动。

说到使用 chkconfig,让我向您介绍一下我当天踩过的一个陷阱。
添加名为 myapp 的新服务后,我使用 chkconfig --add myapp 来添加它。
结果,重启后系统无法启动。
经过一番查找,发现 /etc/rc.d/init.d/myapp 下的 chkconfig 没有指定注释,优先级和启动命令都是空的。
这项工作现在由 systemd 来处理,它只有几个服务文件,简单多了。

你提到的--level参数我记得很清楚。
有一次,我在调整网络服务时,必须将某个网卡启动到3 级和5 级,但不能启动到2 级。
那一刻,我的手颤抖着,我在上面写了chkconfig --level 2 3 4 5 eth0。
结果系统也将网卡激活为2 级,导致另一台服务器出现网络冲突。
所以现在使用 chkconfig 之前需要三思。
毕竟,服务器现在都在云端,重新启动它们需要花钱。

删除服务同样令人烦恼。
我记得删除了旧的日志服务并使用 chkconfig --del logserver,但系统告诉我没有找到它。
检查后发现需要先把/etc/rc.d/init.d/logserver下chkconfig写的符号链接去掉,否则lnk会残留。
现在用systemctl基本上不需要这个操作了。

对于init.d脚本的注释,我见过的最标准化的是一些大厂商的开源项目,比如Apache或Nginx脚本。
它们在注释中写得很清楚:默认开始3 5 ,默认停止0 6 ,优先级9 9 ,这样chkconfig才能正常识别它们。
但很多小公司开发的服务时好时坏,往往注释不完整,导致chkconfig猜测,有时使用后也无法启动。

现在想来,chkconfig其实是相当简陋的。
Systemd 的单元文件处理过于灵活。
例如使用systemctl activate nginx.service直接将服务添加到default.target中,重启后会自动启动。
多酷啊。
但当时别无选择。
大家都靠chkconfig大哥。

我没有使用你提到的 --resetpriorities 。
我记得有一个服务的优先级设置为9 9 结果,它比初始化过程更早启动,从而扰乱了系统。
改变优先级不方便,改变脚本注释更不方便,一般服务我都懒得这么做。
现在看来systemd的依赖机制可靠多了,谁该启动、谁最后启动一目了然。

总之,chkconfig现在已经被弃用了,但是理解它的逻辑对于理解初始化过程还是有帮助的。
如果确实想使用,建议先在虚拟机上尝试一下,而不是直接在生产环境中运行。

怎样修改Linux默认启动级别或模式

哈,你的问题问中了。
上周有客户问我是否确实遇到过这种情况,想要更改起始级别。
不过,我得先跟大家说几句话,因为现在很多Linux发行版,尤其是Ubuntu和CentOS 7 之后的版本,已经不再使用/etc/inittab文件了。
当今的系统通常使用 systemd 来管理这些。

无论如何,你现在可以按照这个方法,但是你应该注意你的系统。
如果您仍然使用旧版本的 System V init 或 SysVinit,这对您来说不是问题。

在这里,让我重复一下这些步骤,看看是否对您有帮助:
1 以管理员身份进入Linux系统。
这需要 root 权限,或者您可以使用 sudo su 切换到 root 用户。
2 . 找到 /etc/inittab 文件。
使用 cat /etc/inittab 或 nano /etc/inittab (或您最喜欢的编辑器)打开它。
3 . 找到行 id:5 :initdefault:。
你看,这里的5 代表图形界面,就是X-Window(或Wayland,但通常归类在“图形”下)。
此 Initdefault 是标准启动级别。
4 . 将 5 更改为 3 更改后保存文件。
如果您使用的是 nano,只需按 Ctrl+X,然后按 Y,然后按 Enter 即可确认保存。

然后你必须重新启动系统,例如例如。
使用“重新启动”或“立即关闭 -r”。
重新启动后,系统默认为多用户文本模式(级别 3 )。

但是!这里有一个危险需要你注意:
如果系统中有一个 GUI 服务(即 X 或 Wayland),但你想将其更改为文本模式启动,仅仅更改 inittab 可能还不够。
您可能还需要卸载或禁用 GUI 相关服务或调整显示管理器配置(例如 GDM、LightDM、SDDM)。
否则,您可能更改了启动级别,系统启动后仍然直接跳回图形界面。
如今许多系统都使用 systemd。
如果你的系统是CentOS 7 +、Ubuntu 1 6 .04 +等,则不使用inittab。
要更改此类系统的默认启动目标(target),您需要修改 /etc/systemd/system/default.target 文件并更改其中的路径以文本模式指向目标,例如例如。
/usr/lib/systemd/system/multi-user.target。
或者更简单:只需使用命令 sudo systemctl set-default multi-user.target。
使用 systemctl get-default 检查哪个目标当前是默认目标。

总结一下:
如果你的系统确实还在使用/etc/inittab(比较旧),那么你提到的方法,把5 改成3 ,然后重启,基本上是可行的。
如果您的系统较新(使用systemd),您提到的方法可能无效,您需要更改default.target或使用systemctl命令。

我不确定您使用的是哪个版本的Linux。
可以先 ps -e |使用grep inittab查看是否有这样的进程或文件,或者使用systemctl --version查看是否有有关systemd的信息。
这样您就可以决定要使用哪种方法。

无论如何,这取决于你。
如果您的系统是新系统,我们建议您首先检查发行版文档,了解如何将 Target 更改为默认启动。
如果你犯了一个错误,当系统无法启动时你就会遇到麻烦。

Linux 系统启动过程

说白了,Linux系统的启动过程其实很简单,但是其中的技巧却有很多。
我们先来说说最重要的事情。
整个启动过程可以分为五个步骤:内核启动;运行init系统初始化;设置终端和用户登录系统。
我们去年做的项目大概有3 000台服务器,启动过程也是遵循这个流程。

一开始我以为只是打开内核的问题,后来发现我错了。
加载内核后,必须运行init进程。
该进程是所有用户进程的祖先。
Init类型为SysVinit;根据系统版本不同,例如Upstart、Systemd等;他们每个人都有自己的配置文件。

一个非常重要的细节,就是跑步评分。
Linux有7 个操作级别;例如0为关机状态; 1 是单用户模式,5 是图形界面模式。
根据运行阶段的不同,init会运行不同的初始化脚本来启动或停止相关服务。

等等,还有一件事。
用户登录系统有多种方式。
它们是命令行,可以通过 SSH 或图形界面访问。
很多人没有意识到这一点。
事实上,您可以在图形和文本模式之间切换。
例如,物理设备 Ctrl+Alt+F1 ~F6 您可以使用 Alt+Space+F1 ~F6 切换 VMware 虚拟机。

最后,作为警告,服务器通常会避免关闭。
你需要按照规范去做,比如运行sync命令同步数据,然后使用shutdown-hnow立即关机。
或者您需要使用 shutdown-rnow 立即重新启动。

我认为值得尝试的是理解这个过程。
因为您能够更好地进行系统维护和故障排除。