前言
有时候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
cron 时间格式解释:
因此,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
sudo systemctl daemon-reload
sudo systemctl enable saturday-shutdown.timer
sudo systemctl start saturday-shutdown.timer

