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

一、使用 Cron(方法一)

cron 是 Linux 系统自带的用于定时执行任务的守护进程,非常适合这种周期性的任务

1.编辑 root 的 crontab 文件

关机需要 root 权限,因此我们需要编辑 root 用户的 cron 任务表。使用 sudo 来获取权限

1

sudo crontab -e

如果是直接以 root 用户登录,则只需输入 crontab -e

如果是第一次运行,可能会让你选择编辑器。推荐选择 nano(比较简单)或 vim

2.添加定时任务

在打开的 crontab 文件末尾,添加新的一行。这里有几个常见方案:

方案 A:在每周六晚上 11 点关机

1

2

# 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 分关机

1

2

# 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 文件

1

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

将以下内容写入文件:

1

2

3

4

5

6

[Unit]

Description=Saturday Shutdown

[Service]

Type=oneshot

ExecStart=/usr/sbin/shutdown -h now

2.创建 Timer 单元文件

然后创建一个 timer 文件来定义何时触发上述 service

1

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

将以下内容写入文件:

1

2

3

4

5

6

7

8

9

10

[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 加载新的单元文件,并启用这个定时器

1

2

3

sudo systemctl daemon-reload

sudo systemctl enable saturday-shutdown.timer

sudo systemctl start saturday-shutdown.timer

4.检查 Timer 状态

1

sudo systemctl status saturday-shutdown.timer

重要提醒

1.权限:确保使用 sudo 或 root 用户来设置,因为普通用户没有关机权限。

2.测试:在设置好后,强烈建议你先将时间修改为几分钟后(例如,将 cron 表达式改为 * * * * * 来下一分钟测试),测试一下是否能正常工作,然后再改回周六的时间,避免配置错误导致意外。


 

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐