shutdown是操作系统提供的用于关闭、重启或注销计算机的标准命令,不同系统的语法存在明显区别。正确使用该命令可以在定时维护、远程批量操作等场景中提高效率,也能防止误关机造成业务中断。

Windows系统下的shutdown命令
在Windows中,shutdown命令通过命令行或PowerShell执行,参数以斜杠开头。最常用的功能包括立即关机、定时关机和取消关机。比如需要在一分钟后关闭本机,可以运行shutdown /s /t 60,其中/s表示关机,/t后面跟延迟秒数。
如果管理员希望远程关闭另一台主机,可使用/m \计算机名参数,同时需要目标机器开启远程注册表与管理共享。取消已经计划的关机任务则使用shutdown /a,该指令必须在倒计时结束前发出。下面是一段典型的批处理脚本,用于在夜间维护窗口安全重启服务器:
@echo off rem 延迟120秒后重启,并注明原因 shutdown /r /t 120 /m \FILE-SRV01 /c "夜间补丁安装" echo 已向FILE-SRV01发送重启指令
Windows的shutdown还支持/h进入休眠、/l注销当前用户。需要注意的是,普通用户如果没有相关特权,远程关机操作会被系统拒绝,此时需用管理员身份启动终端。
常见参数对照表
| 参数 | 作用 |
|---|---|
| /s | 关闭计算机 |
| /r | 关闭并重新启动 |
| /a | 中止系统关闭 |
| /t xxx | 设置延迟秒数 |
从表中可以看出,Windows将动作与计时拆成独立开关,组合灵活。但在书写时容易把/t漏掉导致立即关机,运维脚本里应当显式写明时间参数。
Linux系统下的shutdown命令
Linux发行版中的shutdown位于/sbin目录,默认只有root能执行。它的选项使用减号,且时间参数写法更自由。最基础的立即关机指令是shutdown -h now,-h代表 halt 停止系统,now是时间关键词,也可替换为+分钟数,如shutdown -h +10表示十分钟后关机。
与Windows不同,Linux取消关机使用shutdown -c,并且会在所有登录终端广播通知。系统会将计划写入/run/systemd/shutdown或类似运行时文件,由init进程接管。以下例子展示如何安排凌晨三点重启并留言:
#!/bin/bash # 在03:00重启,并通知在线用户 shutdown -r 03:00 "系统升级,请保存工作" # 若需取消 # shutdown -c
很多现代Linux用systemd作为初始化系统,shutdown实际是指向systemctl的软链接,但传统参数依然兼容。对于云主机,建议通过控制台先测试命令返回码,避免SSH断开后无法取消关机。
权限与日志
普通用户调用shutdown会被提示权限不足,必须加sudo或切到root。关机事件通常记录在/var/log/syslog或journalctl中,使用journalctl -b -1可查看上一次启动前的关机原因,方便定位异常断电。
- 使用sudo shutdown -h now可安全关闭开发虚拟机
- 生产环境务必确认没有活跃数据库连接再执行
- 远程会话中先用nohup或tmux防止命令中断
跨平台使用注意点
虽然命令名称相同,但Windows与Linux的shutdown不能混用。在写跨平台运维工具时,应当先判断操作系统类型,再拼装对应参数。例如在Python脚本里检测platform.system()返回值,分支调用子进程。
误区:有人以为shutdown /s在Linux也能用,结果被shell当成路径报错。牢记斜杠与减号的区别是第一步。
另外,某些嵌入式设备使用BusyBox,shutdown参数更少,可能只支持-h和-r,编写自动化时要做能力探测。掌握这些差异后,你就能在多种环境中稳妥地完成关机与重启任务。