shutdown -r now
reboot [选项]
| 选项 | 说明 |
|---|---|
-n |
重启前不进行 sync 操作(不推荐) |
-w |
不实际重启,只写入 /var/log/wtmp 记录 |
-d |
不写入 wtmp 记录 |
-f |
强制重启,不调用 shutdown |
-i |
重启前关闭所有网络接口 |
--help |
显示帮助信息 |
普通用户需要 sudo 权限执行重启命令
sudo reboot
或使用 root 用户:
reboot
使用 -f 选项强制重启(不推荐)
sudo reboot -f
使用 -w 选项模拟重启记录
sudo reboot -w
查看写入的记录:
# 查看 wtmp 记录中的重启记录
last -x reboot
# 查看最近的系统事件
last -x | head -10
使用 -n 选项跳过同步操作
sudo reboot -n
服务器维护时安全重启:
# 先通知用户
sudo wall "系统将在10分钟后进行维护重启,请保存您的工作"
# 等待后执行重启
sleep 600 && sudo reboot
# 或者使用shutdown命令,功能更丰富
sudo shutdown -r +10 "系统维护重启"
在桌面环境中创建重启脚本:
#!/bin/bash
# 桌面重启脚本
echo "系统将在60秒后重启,按Ctrl+C取消"
sleep 60
sudo reboot
或使用GUI工具重启:
# 在GNOME桌面中
gnome-session-quit --reboot
# 在KDE桌面中
qdbus org.kde.ksmserver /KSMServer logout 0 2 2
在自动化部署或配置脚本中使用重启:
#!/bin/bash
# 自动化配置脚本
echo "开始系统配置..."
# 更新系统配置
cp new_config.conf /etc/config.conf
# 重启以使配置生效
if [ $? -eq 0 ]; then
echo "配置成功,系统将在30秒后重启"
echo "按Ctrl+C取消重启"
sleep 30
sudo reboot
else
echo "配置失败,不重启系统"
exit 1
fi
| 命令 | 功能 | 特点 | 示例 |
|---|---|---|---|
reboot |
立即重启系统 | 最直接的重启命令 | sudo reboot |
shutdown -r now |
立即重启 | 功能更丰富,可以设置延迟 | sudo shutdown -r now |
shutdown -r +5 |
5分钟后重启 | 可设置重启时间 | sudo shutdown -r +5 |
init 6 |
切换到运行级别6(重启) | SysV init 系统的重启方式 | sudo init 6 |
systemctl reboot |
重启系统 | Systemd 系统的重启方式 | sudo systemctl reboot |
halt --reboot |
重启系统 | 与 reboot 相同 | sudo halt --reboot |
Linux系统重启过程:
这个过程确保了数据的安全性和系统的一致性。
reboot命令:
shutdown -r命令:
使用建议:
reboot 或 shutdown -r nowshutdown -r +时间 "消息"shutdown 命令取消重启操作的方法取决于使用的命令:
1. 取消 shutdown 计划的重启:
# 如果使用 shutdown 计划了重启
sudo shutdown -c
2. reboot 命令无法取消:
一旦执行 reboot 命令,通常无法取消。只能在重启前的几秒内尝试 Ctrl+C,但通常无效。
3. 紧急停止重启:
# 在重启过程中,如果还没有到硬件重启阶段
# 可以尝试快速执行(成功率很低)
sudo killall -9 shutdown
sudo killall -9 reboot
最佳实践:生产环境中,优先使用 shutdown 命令,以便在需要时取消重启。
有多种方法可以查看系统重启记录:
1. 使用 last 命令查看重启记录:
# 查看重启记录
last -x reboot
# 查看所有系统事件
last -x
# 查看最近的系统事件
last -x | head -20
2. 查看系统日志:
# 查看系统日志中的重启记录
sudo grep -i "reboot\|shutdown" /var/log/syslog | tail -20
# 对于使用systemd的系统
sudo journalctl --list-boots # 列出所有启动记录
sudo journalctl -b # 查看当前启动的日志
sudo journalctl -b -1 # 查看上一次启动的日志
# 查看特定的重启时间
sudo journalctl --since "2024-03-01" --until "2024-03-11" | grep -i "reboot"
3. 查看 uptime 命令:
# 查看系统运行时间
uptime
# 查看系统启动时间
who -b
# 或
uptime -s
重启远程服务器后,需要等待服务器重新启动并恢复服务:
1. 等待并尝试重新连接:
#!/bin/bash
# 等待服务器重启并重新连接
REMOTE_HOST="example.com"
REMOTE_USER="admin"
echo "正在重启远程服务器..."
ssh $REMOTE_USER@$REMOTE_HOST "sudo reboot"
echo "等待服务器重启(60秒)..."
sleep 60
# 尝试重新连接
echo "尝试重新连接..."
for i in {1..10}; do
if ssh $REMOTE_USER@$REMOTE_HOST "echo '连接成功'"; then
echo "服务器已重启完成,连接成功"
break
else
echo "第 $i 次连接尝试失败,等待10秒..."
sleep 10
fi
done
2. 使用更智能的等待脚本:
#!/bin/bash
# 智能等待服务器重启
wait_for_reboot() {
local host=$1
local max_attempts=30
local wait_seconds=10
echo "等待服务器 $host 重启..."
for ((i=1; i<=max_attempts; i++)); do
# 尝试ping服务器
if ping -c 1 -W 2 $host > /dev/null 2>&1; then
echo "服务器 $host 已启动"
# 等待SSH服务启动
sleep 10
# 尝试SSH连接
if ssh -o ConnectTimeout=10 $host "exit" > /dev/null 2>&1; then
echo "SSH服务已就绪"
return 0
fi
fi
echo "第 $i 次尝试...(等待 $wait_seconds 秒)"
sleep $wait_seconds
done
echo "错误:服务器 $host 在预期时间内未重启完成"
return 1
}
# 使用示例
wait_for_reboot "192.168.1.100"
3. 使用监控工具:
# 使用nmap检查端口
nmap -p 22 192.168.1.100
# 使用telnet测试连接
telnet 192.168.1.100 22
wall 命令通知所有用户ps 或 jobs 检查是否有重要的后台进程在运行-f 或 -n 选项shutdown 命令,可以设置延迟和发送消息#!/bin/bash
# 系统重启监控脚本
LOG_FILE="/var/log/reboot_monitor.log"
ALERT_EMAIL="admin@example.com"
# 记录重启事件
log_reboot_event() {
local reason=$1
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
local user=$(whoami)
local hostname=$(hostname)
echo "重启事件 [$timestamp]" >> $LOG_FILE
echo "主机: $hostname" >> $LOG_FILE
echo "用户: $user" >> $LOG_FILE
echo "原因: $reason" >> $LOG_FILE
echo "运行时间: $(uptime -p)" >> $LOG_FILE
echo "负载: $(uptime | awk -F'load average:' '{print $2}')" >> $LOG_FILE
echo "---" >> $LOG_FILE
# 发送邮件通知(如果配置了邮件)
# echo "系统已重启" | mail -s "重启通知: $hostname" $ALERT_EMAIL
}
# 检查是否为重启后首次运行
check_boot_time() {
current_boot_time=$(uptime -s)
last_boot_time=$(tail -1 $LOG_FILE 2>/dev/null | grep "启动时间:" | cut -d: -f2-)
if [ "$current_boot_time" != "$last_boot_time" ]; then
log_reboot_event "系统启动"
fi
}
# 安全的重启函数
safe_reboot() {
local delay=$1
local reason=$2
if [ -z "$delay" ]; then
delay=60
fi
if [ -z "$reason" ]; then
reason="计划重启"
fi
echo "系统将在 $delay 秒后重启"
echo "原因: $reason"
echo "按 Ctrl+C 取消"
# 记录重启计划
log_reboot_event "$reason (计划在 $delay 秒后)"
# 倒计时
for ((i=delay; i>0; i--)); do
echo -ne "倒计时: $i 秒\r"
sleep 1
done
echo "开始重启..."
sudo reboot
}
# 主程序
case $1 in
"safe")
safe_reboot $2 $3
;;
"log")
echo "最近的重启记录:"
tail -50 $LOG_FILE
;;
"check")
check_boot_time
;;
*)
echo "使用方法: $0 {safe|log|check}"
echo " safe [延迟秒数] [原因] - 安全重启"
echo " log - 查看重启记录"
echo " check - 检查重启事件"
;;
esac