Linux服务器设置定时关机的两种方法详解
有时候linux服务器需要在每周定时关闭让其清除一些运行缓存避免高负荷长时间运转降低服务器的寿命这里推荐两种方法cron和Systemd Timers一、使用 Cron方法一cron是 Linux 系统自带的用于定时执行任务的守护进程非常适合这种周期性的任务1.编辑 root 的 crontab 文件关机需要 root 权限因此我们需要编辑 root 用户的 cron 任务表。使用sudo来获取权限1sudocrontab-e如果是直接以 root 用户登录则只需输入crontab -e。如果是第一次运行可能会让你选择编辑器。推荐选择nano比较简单或vim2.添加定时任务在打开的 crontab 文件末尾添加新的一行。这里有几个常见方案方案 A在每周六晚上 11 点关机12# m h dom mon dow command0 23 * * 6/sbin/shutdown-h 00 23 * * 6表示在每个星期6周六的 2300 执行任务/sbin/shutdown -h 0-h代表 halt停止0代表 0 分钟后执行即立即执行方案 B在每周六凌晨 2 点 15 分关机12# m h dom mon dow command15 2 * * 6/sbin/shutdown-h now15 2 * * 6表示每周六的 0215 执行。shutdown -h now也是立即关机的常用写法。cron 时间格式解释* * * * * command_to_execute- - - - -| | | | || | | | ----- 星期几 (0 - 6) (0 是周日)| | | ------- 月份 (1 - 12)| | --------- 日期 (1 - 31)| ----------- 小时 (0 - 23)------------- 分钟 (0 - 59)因此0 23 * * 6的意思就是每周六6的 23点230分03.保存并退出如果使用nano按Ctrl X然后按Y确认最后按Enter保存。如果使用vim按Esc键然后输入:wq再按Enter。4.验证任务是否添加成功显示这样就代表成功添加了二、使用 Systemd Timers方法二虽然cron是标准方法但一些现代 Linux 发行版如最新的 Ubuntu、CentOS 等也支持使用systemd timers来实现类似功能。这种方法更集成于系统可以更好地管理依赖关系和日志1.创建 Service 单元文件首先创建一个定义要执行什么操作即关机的 service 文件1sudonano/etc/systemd/system/saturday-shutdown.service将以下内容写入文件123456[Unit]DescriptionSaturday Shutdown[Service]TypeoneshotExecStart/usr/sbin/shutdown-h now2.创建 Timer 单元文件然后创建一个 timer 文件来定义何时触发上述 service1sudonano/etc/systemd/system/saturday-shutdown.timer将以下内容写入文件12345678910[Unit]DescriptionShutdown every Saturday at 11 PMRequiressaturday-shutdown.service[Timer]OnCalendarSat 23:00:00Persistenttrue[Install]WantedBytimers.targetOnCalendarSat 23:00:00这是设置时间的关键语法非常直观表示“每周六 2300”。Persistenttrue如果上次定时器触发时服务器错过了比如当时已经关了下次启动时会立即触发任务。3.启用并启动 Timer让 systemd 加载新的单元文件并启用这个定时器123sudosystemctl daemon-reloadsudosystemctlenablesaturday-shutdown.timersudosystemctl start saturday-shutdown.timer4.检查 Timer 状态1sudosystemctl status saturday-shutdown.timer重要提醒1.权限确保使用sudo或 root 用户来设置因为普通用户没有关机权限。2.测试在设置好后强烈建议你先将时间修改为几分钟后例如将 cron 表达式改为* * * * *来下一分钟测试测试一下是否能正常工作然后再改回周六的时间避免配置错误导致意外。