前言
有时候linux服务器需要在每周定时关闭,让其清除一些运行缓存,避免高负荷长时间运转,降低服务器的寿命,这里推荐两种方法cron和systemd timers

一、使用 cron(方法一)
cron 是 linux 系统自带的用于定时执行任务的守护进程,非常适合这种周期性的任务
1.编辑 root 的 crontab 文件
关机需要 root 权限,因此我们需要编辑 root 用户的 cron 任务表。使用 sudo 来获取权限
sudo crontab -e
如果是直接以 root 用户登录,则只需输入 crontab -e。
如果是第一次运行,可能会让你选择编辑器。推荐选择 nano(比较简单)或 vim
2.添加定时任务
在打开的 crontab 文件末尾,添加新的一行。这里有几个常见方案:
方案 a:在每周六晚上 11 点关机
# m h dom mon dow command 0 23 * * 6 /sbin/shutdown -h +0
0 23 * * 6:表示在每个星期6(周六)的 23:00 执行任务/sbin/shutdown -h +0:-h代表 halt(停止),+0代表 0 分钟后执行,即立即执行
方案 b:在每周六凌晨 2 点 15 分关机
# m h dom mon dow command 15 2 * * 6 /sbin/shutdown -h now
15 2 * * 6:表示每周六的 02:15 执行。shutdown -h now:也是立即关机的常用写法。
cron 时间格式解释:
* * * * * command_to_execute
- - - - -
| | | | |
| | | | +----- 星期几 (0 - 6) (0 是周日)
| | | +------- 月份 (1 - 12)
| | +--------- 日期 (1 - 31)
| +----------- 小时 (0 - 23)
+------------- 分钟 (0 - 59)
因此,0 23 * * 6 的意思就是:每周六(6)的 23点(23)0分(0)
3.保存并退出
- 如果使用
nano:按ctrl + x,然后按y确认,最后按enter保存。 - 如果使用
vim:按esc键,然后输入:wq,再按enter。
4.验证任务是否添加成功
显示这样就代表成功添加了

二、使用 systemd timers(方法二)
虽然 cron 是标准方法,但一些现代 linux 发行版(如最新的 ubuntu、centos 等)也支持使用 systemd timers 来实现类似功能。这种方法更集成于系统,可以更好地管理依赖关系和日志
1.创建 service 单元文件
首先创建一个定义要执行什么操作(即关机)的 service 文件
sudo nano /etc/systemd/system/saturday-shutdown.service
将以下内容写入文件:
[unit] description=saturday shutdown [service] type=oneshot execstart=/usr/sbin/shutdown -h now
2.创建 timer 单元文件
然后创建一个 timer 文件来定义何时触发上述 service
sudo nano /etc/systemd/system/saturday-shutdown.timer
将以下内容写入文件:
[unit] description=shutdown every saturday at 11 pm requires=saturday-shutdown.service [timer] oncalendar=sat 23:00:00 persistent=true [install] wantedby=timers.target
oncalendar=sat 23:00:00:这是设置时间的关键,语法非常直观,表示“每周六 23:00”。persistent=true:如果上次定时器触发时服务器错过了(比如当时已经关了),下次启动时会立即触发任务。
3.启用并启动 timer
让 systemd 加载新的单元文件,并启用这个定时器
sudo systemctl daemon-reload sudo systemctl enable saturday-shutdown.timer sudo systemctl start saturday-shutdown.timer
4.检查 timer 状态
sudo systemctl status saturday-shutdown.timer
重要提醒
1.权限:确保使用 sudo 或 root 用户来设置,因为普通用户没有关机权限。
2.测试:在设置好后,强烈建议你先将时间修改为几分钟后(例如,将 cron 表达式改为 * * * * * 来下一分钟测试),测试一下是否能正常工作,然后再改回周六的时间,避免配置错误导致意外。
3.取消:如果你之后想取消这个自动关机任务:
对于 cron:再次运行 sudo crontab -e,删除或注释掉(在行首加 #)那行配置即可。
对于 systemd timer:运行
sudo systemctl stop saturday-shutdown.timer 和 sudo systemctl disable saturday-shutdown.timer。
4.警告用户:如果服务器上有其他用户,最好使用 shutdown 命令的 -k 选项先发送一个警告信息,或者提前通知他们。例如,你可以先广播一条消息:
# 在关机前5分钟向所有登录用户发送警告 shutdown -h +5 "系统将在5分钟后进行每周例行关机维护,请保存您的工作。"
总结
本文介绍了两种在linux服务器上设置每周定时关机的方法
- cron方法:通过编辑root用户的crontab文件,添加定时任务(如每周六23:00执行/sbin/shutdown -h +0),利用cron守护进程实现周期性关机。
- systemd timers方法:创建service和timer单元文件(如oncalendar=sat 23:00:00),通过systemd管理任务触发,支持日志和依赖关系。两种方法均需root权限,建议测试后应用,并可通过对应命令取消任务。文中还提醒注意用户通知及权限问
以上就是linux服务器设置定时关机的两种方法详解的详细内容,更多关于linux服务器定时关机的资料请关注代码网其它相关文章!
发表评论