插件窝 干货文章 linux定时关机如何设置

linux定时关机如何设置

关机 shutdown bash 任务 235    来源:    2025-04-23

在 Linux 系统中设置定时关机可以通过以下几种方法实现,根据你的需求选择最合适的方式:


方法 1:使用 shutdown 命令(一次性定时关机)

sudo shutdown -h +30  # 30分钟后关机
  • 参数说明
    • -h:表示关机(halt)。
    • +30:延迟时间(分钟),例如 +60 表示 1 小时后关机。
    • 也可以指定具体时间,例如: bash sudo shutdown -h 23:00 # 晚上11点关机

取消定时关机

sudo shutdown -c  # 取消已计划的关机

方法 2:使用 at 命令(单次任务)

  1. 安装 at(如果未安装): bash sudo apt install at # Debian/Ubuntu sudo yum install at # CentOS/RHEL
  2. 设置定时关机(例如 2 小时后): bash echo "shutdown -h now" | at now + 2 hours
    • 或指定具体时间: bash echo "shutdown -h now" | at 23:00
  3. 查看任务列表: bash atq
  4. 删除任务(如需取消): bash atrm <任务ID> # 通过 atq 获取ID

方法 3:使用 cron 任务(周期性定时关机)

  1. 编辑当前用户的 cron 表: bash crontab -e
  2. 添加一行(例如每天 23:00 关机):

    0 23 * * * /sbin/shutdown -h now
    
    • 时间格式分钟 小时 日 月 星期 命令
    • 需要确保 /sbin/shutdown 的完整路径(可通过 which shutdown 确认)。
  3. 保存退出后,cron 会自动加载任务。

查看或删除 cron 任务

crontab -l  # 查看任务
crontab -r  # 删除所有任务(慎用)

方法 4:使用 systemd 定时器(适用于 systemd 系统)

  1. 创建服务单元文件:

    sudo nano /etc/systemd/system/shutdown.timer
    

    内容如下(例如每天 23:00 关机):

    [Unit]
    Description=Daily Shutdown
    
    [Timer]
    OnCalendar=*-*-* 23:00:00
    Persistent=true
    
    [Install]
    WantedBy=timers.target
    
  2. 关联服务文件:

    sudo nano /etc/systemd/system/shutdown.service
    

    内容:

    [Unit]
    Description=Shutdown
    
    [Service]
    Type=oneshot
    ExecStart=/sbin/shutdown -h now
    
  3. 启用并启动定时器: bash sudo systemctl enable --now shutdown.timer

注意事项

  1. 权限问题:关机需要 root 权限,因此需使用 sudo 或 root 用户操作。
  2. 网络延迟关机:如需远程关机,确保命令在 SSH 会话结束前执行(可用 nohupdisown)。
  3. 日志验证
    • 查看关机日志: bash journalctl -u shutdown.service # 针对 systemd
    • 或检查系统日志: bash grep "shutdown" /var/log/syslog

总结

  • 单次关机:用 shutdownat
  • 周期性任务:用 cronsystemd
  • 测试时建议先用 wall "Test message" 发送通知,避免误操作。