
实际生产环境中某些情况下 Linux 服务器系统在出现致命错误需要远程进行重启,通过常规的 reboot、init 6 等方法无法正常重启(例如重启时卡在驱动程序里等情况),这时就需要通过下面介绍的几种特殊的方法进行强制重启。
注意
下面这些强制重启 Linux 的方法都是直接跳过 umount 文件系统及 sync 等 *** 作,可能导致数据损坏,不在特殊情况下请勿使用。
另外当然这些都是需要 root 超级用户权限的哦。
reboot 命令
直接通过运行 reboot -nf 命令,这样重启时可以指定跳过 init 的处理和 sync *** 作,这样可以避免大多数情况下的问题。
magic SysRq key 方法
magic SysRq key 通过 proc 接口提供用户直接发底层命令给 kernel 的功能,可以实现关机、重启、宕机等 *** 作
Linux kernel 需要开启 CONFIG_MAGIC_SYSRQ 才可以支持 magic SysRq key。
运行下面两条命令就可以直接强制重启系统:
[root@localhost ~]# echo 1 >/proc/sys/kernel/sysrq
[root@localhost ~]# echo b >/proc/sysrq-trigger
相应的直接强制关机的命令:
[root@localhost ~]# echo 1 >/proc/sys/kernel/sysrq
[root@localhost ~]# echo o >/proc/sysrq-trigger
watchdog 方法
如果 Linux kernel 未开启 magic SysRq key 或者不起作用,可以尝试使用 watchdog 重启方法。watchdog 通过监控数据输入是否正常可以实现在系统出现异常时自动重启系统,这里我们刚好可以借用的。
首先需要加载 watchdog 支持,这个和主板硬件设备有关,如果只需要软件模拟的,可以运行:
[root@localhost ~]# modprobe softdog
命令加载软件 watchdog 支持,接着再运行:
[root@localhost ~]# cat /dev/watchdog
命令,该命令会马上退出并报错,同时系统日志中就会提示:
softdog: Unexpected close, not stopping watchdog!
这就表示 watchdog 设备是被意外关闭的而不是正常停止的,大约等待 60 秒之后你就会发现 Linux 系统自动重启了。
Linux watchdog 的异常等待时间是通过 /proc/sys/kernel/watchdog_thresh 设置的,一般默认为 60 秒。
IPMI 方法
上面几种方法都不能用?如果你的主板刚好支持 IPMI 管理接口的话
那可以直接通过 IPMI 实现硬件上的强制关机或重启。
首先加载 IPMI 支持:
[root@localhost ~]# modprobe ipmi_msghandler ipmi_devintf ipmi_si
确认 IPMI 设备是否已找到:
[root@localhost ~]# ls -l /dev/ipmi*
如果输出正常的话表示 IPMI 被正确加载了,接着安装 ipmitool 管理工具。
ipmitool 可以通过 IPMI 接口完成对本机或远程主机的一系列管理 *** 作。
这里我们就用直接电源管理的,重启系统:
[root@localhost ~]# ipmitool power reset
运行完成后主机就会马上重启,相应的关闭主机可以运行命令:
[root@localhost ~]# ipmitool power off
ipmitool 还可以实现在系统未启动时远程查看监控主板硬件状态等功能
对于使用Linux的人来说,迟早都可能在某一阶段遇到这个问题:你正在兴高采烈得探索你的系统,调整,优化以挖掘其最大的潜力,突然,omg,你发现,系统不能启动了!如果你之前已经习惯了使用Windows系统,我打赌,这是一个经常性的问题,而你最初闪出的念头就是格式化并重装系统。而对于Linux而言,重装系统绝对是最后的选择,只有在我们其它努力都作废之后,才需要考虑这一点。我个人认为,唯一能让人不得不重装系统的情况就是,不幸的你以root身份敲下了不幸的命令rm -rf /。恩,千万别模仿!虽然你可以通过“ctrl c”来终止这该死的自杀 *** 作。对于Linux,一旦出现无法启动系统情况的时候,也许你知道错误大概出在哪里,有比较明确的修复方向,比如调整屏幕分辨率,或者修改某个脚本,等等。但是,现在问题的关键,是需要能够启动或者访问Linux系统,这样才能修复它。下面就是一些应急措施的介绍。最先应该想到,也许也是最简单的办法,就是当boot loader—通常都是grub—开始执行时,通过它调整系统运行级别。在出现菜单项后,按下键盘上的“e”按键,这样,菜单项能显示一个或者多个启动命令,找到有关内核的这一行,将光标移到上面,高亮这一行,再按下“e”,grub就会将这行内容用一个简单的编辑器环境打开,让我们能够对其做出改变。那么,到底怎么改变呢?很简单,只需要告诉init程序,我们希望通过那个级别启动即可。在内核命令行的最后加上“init X”参数,其中X表示你所希望的运行级别,举个实际例子,如果你判断可能是因为显卡驱动或者分辨率导致的启动错误,就可以启动到命令行模式来修复它,那么,就应该把运行级别改为纯命令行模式,假设是4,改动后的内核命令行就应该是类似于这样的。/boot/vmlinuz-2.6.17-11-generic root=UUID=5cc79966-969d-4cd0-abb2-74a132efbd7c ro vga=794 quiet splash init 4这样,就等于告诉了init程序,我要以运行级别4启动,而不是默认的运行级别。如果这些招数都无法奏效了,怎么办?难道我们就坐以待毙了?no。这里还有一个偏门可以供你使用。我们知道,在默认情况下,内核启动时会执行init程序,但是你可以指定不同的程序让内核来执行,只需要在后面添加参数“init=/some/program”即可。“/some/program”通常表示诸如/bin/bash或者/bin/sh这种shell程序。注意这里的等于符号,它的作用是告诉内核,你别启动init程序了,而是启动我等号后面所指定的任意程序吧。大体命令行如下:/boot/vmlinuz-2.6.17-11-generic root=UUID=5cc79966-969d-4cd0-abb2-74a132efbd7c ro vga=794 quiet splash init=/bin/bash这样,你就可以直接启动到所指定的shell中,对发生的错误进行分析,修复等 *** 作。如果这样做都还是不行……好吧,我觉得你人品有问题!那么,还是拿出恢复cd,通常就是你的安装光盘,它允许你在启动时选择是否进入rescue修复模式。进入这个模式之后,他会自动找到你的硬盘安装的系统,并将它们挂载到一个临时目录下,这样,你就能进行修改配置文件或者其它修复 *** 作了。如果还是不行呢?恭喜你,回到Windows时代,还是老老实实重新安装吧。linux定时任务导致卡死你可以:1. 首先新建killprocess.sh脚本,脚本内容为查找对应的卡死进程并查杀 #!/bin/sh #判断是否输入参数,如果没有,则提示,并结束脚本 if[!-2. root用户下,给文件赋予可执行权限 chmod-R777killprocess.sh
3. 在/etc/crontab文件最后添加定时任务 */5 * * *
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)