ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Ubuntu定时关机3种实现方案与配置详解

Ubuntu定时关机3种实现方案与配置详解 1. Ubuntu系统定时关机实现方案解析在Linux系统管理中定时关机是个看似简单却非常实用的功能。作为一名长期使用Ubuntu的开发者我经常遇到需要让服务器或开发机在特定时间自动关机的场景。比如下班后让测试环境自动关闭节省电力或者防止夜间无人值守时运行中的程序消耗资源。Ubuntu系统本身提供了多种实现定时关机的方式每种方法各有特点。最常用的方案是通过cron定时任务调度系统命令这也是Linux系统管理中最正统的做法。不过对于新手而言也可以选择更直观的systemd timer或者简单的shutdown命令配合sleep来实现。重要提示执行关机命令需要管理员权限所有方案都需要以root身份或通过sudo执行2. 使用cron实现精准定时关机2.1 cron服务基础配置cron是Unix-like系统中最经典的定时任务工具通过crontab文件来配置调度规则。在Ubuntu中cron服务默认已安装并运行可以通过以下命令检查状态systemctl status cron如果显示active (running)表示服务正常。首次配置建议先更新crontab默认编辑器避免新手掉进nano的坑sudo update-alternatives --config editor # 选择熟悉的编辑器如vim或nano2.2 编写定时关机任务为root用户添加定时任务普通用户的cron无权执行关机操作sudo crontab -e在打开的文件末尾添加如下行实现每天23:00关机0 23 * * * /sbin/shutdown -h now这条cron表达式的含义是第1个0分钟数为0第2个23小时数为23晚上11点后三个*每天、每月、每周都执行/sbin/shutdown关机命令完整路径-h now立即关机halt2.3 cron表达式深度解析很多新手对cron的五个星号感到困惑这里详细说明下格式* * * * * 要执行的命令 - - - - - | | | | | | | | | ----- 星期几 (0 - 6) (周日0) | | | ------- 月份 (1 - 12) | | --------- 日 (1 - 31) | ----------- 小时 (0 - 23) ------------- 分钟 (0 - 59)如果想设置每周工作日(周一到周五)23:30关机表达式应为30 23 * * 1-5 /sbin/shutdown -h now2.4 高级cron技巧日志记录建议将关机操作重定向到日志文件方便排查0 23 * * * /sbin/shutdown -h now /var/log/shutdown.log 21命令路径问题cron执行环境与用户shell环境不同建议使用绝对路径邮件通知cron默认会发送任务输出到用户邮箱可以禁用0 23 * * * /sbin/shutdown -h now /dev/null 213. 替代方案systemd timer实现3.1 创建关机服务单元对于使用systemd的现代Ubuntu系统(17.04)可以创建专用servicesudo vim /etc/systemd/system/shutdown-daily.service内容如下[Unit] DescriptionDaily Shutdown [Service] Typeoneshot ExecStart/usr/sbin/shutdown -h now3.2 配置定时器创建对应的timer单元sudo vim /etc/systemd/system/shutdown-daily.timer内容如下[Unit] DescriptionDaily at 23:00 [Timer] OnCalendar*-*-* 23:00:00 Persistenttrue [Install] WantedBytimers.target3.3 激活并测试启用定时器sudo systemctl daemon-reload sudo systemctl enable --now shutdown-daily.timer检查状态systemctl list-timers --all4. 简单粗暴的sleep方案如果只需要临时执行一次定时关机可以直接使用sudo shutdown -h 23:00或者计算当前时间到23:00的秒数sudo shutdown -h $(($(date -d 23:00 %s) - $(date %s)))5. 常见问题与排查技巧5.1 定时任务未执行排查流程检查cron服务状态systemctl status cron查看cron日志grep CRON /var/log/syslog测试命令能否手动执行sudo /sbin/shutdown -h now5.2 特殊场景处理场景1想在关机前保存工作环境 解决方案创建预处理脚本#!/bin/bash # 保存工作状态命令 /usr/local/bin/save_workspace.sh /sbin/shutdown -h now场景2需要取消已计划的关机sudo shutdown -c5.3 安全性建议避免直接使用root的crontab可以创建专用用户sudo useradd -r -s /bin/false shutdownuser sudo visudo # 添加 shutdownuser ALL(ALL) NOPASSWD: /sbin/shutdown对于多用户系统建议添加关机提醒0 22 * * * /usr/bin/wall 系统将于1小时后关机请保存工作 0 23 * * * /sbin/shutdown -h now6. 扩展应用场景6.1 非固定时间关机如果需要根据条件关机如CPU温度过高#!/bin/bash TEMP$(sensors | grep Package id | awk {print $4} | cut -d -f2 | cut -d . -f1) [ $TEMP -gt 80 ] sudo shutdown -h now6.2 远程定时关机通过SSH实现远程主机定时关机ssh userremote echo password | sudo -S shutdown -h 23:006.3 图形界面工具对于桌面用户可以安装gnome-schedulesudo apt install gnome-schedule然后在应用程序 → 系统工具 → Scheduled tasks中添加关机任务7. 性能与资源考量cron vs systemdcron更适合简单的定时任务systemd timer更现代支持更复杂的时间表达式systemd有更好的日志集成journalctl资源消耗cron每分钟唤醒一次检查任务systemd timer使用事件驱动更节省资源精度对比cron最小精度1分钟systemd timer理论上可以精确到秒级在实际使用中如果只是实现每天定点关机两种方案差异不大。对于需要高精度或复杂时间表达式的场景建议使用systemd timer。
返回列表