Linux服务器设置定时关机的两种方法详解

 更新时间:2025年11月25日 09:43:24   作者:沉在嵌入式的鱼  
有时候linux服务器需要在每周定时关闭,让其清除一些运行缓存,避免高负荷长时间运转,降低服务器的寿命,本文为大家推荐了两种方法cron和Systemd Timers,有需要的可以参考下

前言

有时候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服务器定时关机的资料请关注脚本之家其它相关文章!

相关文章

  • linux服务器磁盘满了的三种解决方案

    linux服务器磁盘满了的三种解决方案

    这篇文章主要给大家介绍了linux服务器磁盘满了的三种解决方案,文章通过图文结合的形式给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-04-04
  • Linux实现线程同步的多种方式汇总

    Linux实现线程同步的多种方式汇总

    本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例代码展示了如何在多线程环境中正确地管理共享资源,确保线程安全,需要的朋友可以参考下
    2025-06-06
  • vim的一些常用简单操作小结

    vim的一些常用简单操作小结

    大家都知道vim在Linux下使用很多,但是习惯了在Windows下的文本操作,在vim中进行文本操作会觉得很不方便,但是vim是一个很强大的工具,只是还不熟练去使用它,下面是一些常用的vim文本操作方法。
    2016-09-09
  • CentOS 7系统下安装ftp服务器的全过程

    CentOS 7系统下安装ftp服务器的全过程

    这篇文章主要介绍了关于CentOS 7系统下安装ftp服务器的全过程,文中介绍的非常详细,详细对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-04-04
  • Yum安装中出现错误mirrorlist.txt的解决方法

    Yum安装中出现错误mirrorlist.txt的解决方法

    前几天在使用Yum install命令安装软件的时候一直提示一个mirrorlist.txt错误,通过查找相关的资料现在找到了解决的方法,所以这篇文章就整理出来和大家分享一下,有同样遇到这个问题的朋友们可以参考借鉴下。
    2016-10-10
  • Ubuntu安装MySQL5.7并配置数据存储路径的方法步骤

    Ubuntu安装MySQL5.7并配置数据存储路径的方法步骤

    这篇文章主要介绍了Ubuntu安装MySQL5.7并配置数据存储路径的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • linux下快速列出局域网中所有主机名(计算机名)的脚本

    linux下快速列出局域网中所有主机名(计算机名)的脚本

    这篇文章主要介绍了linux下快速列出局域网中所有主机名(计算机名)的脚本,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • 在Linux下搭建Zookeeper管理中心步骤分享

    在Linux下搭建Zookeeper管理中心步骤分享

    本篇文章主要给大家详细分享了在Linux下搭建Zookeeper管理中心步骤以及相关软件的下载,需要的朋友参考下。
    2018-01-01
  • Linux物理机区分SSD与HDD的常见方法

    Linux物理机区分SSD与HDD的常见方法

    在 Linux 系统中,我们经常需要确认一块硬盘究竟是 固态硬盘 (SSD) 还是 机械硬盘 (HDD),以便做合理的存储规划和性能评估,本文给大家介绍了Linux物理机区分SSD与HDD的常见方法,需要的朋友可以参考下
    2025-09-09
  • Linux TC流控实现机制过程

    Linux TC流控实现机制过程

    Linux TC通过模块化分层设计(Qdisc、Class、Filter、Policer、Action)实现灵活流量控制,支持从简单FIFO到复杂分层调度,其优势在于可扩展性,但存在配置复杂、单核瓶颈及新技术整合等挑战
    2025-09-09

最新评论