Linux 下执行定时任务之 Systemd Timers

不知道 ECS 因为什么缘故,上面安装的 MySQL 服务老是不定期挂掉,本来想通过 Linux 得 Cron 配置个半小时的定时检测任务,结果一直没有执行,因此又尝试使用了 Systemd Timers 进行了重新配置,简要做个记录。

Systemd Timers 是现代 Linux 系统中 CRON 的一个强大替代品。它具有以下优点:

  1. 更精确的时间控制,支持毫秒级精度。

  2. 更好的日志管理和错误报告。

  3. 可以轻松处理错过的任务(例如,系统关机时)。

  4. 与其他 systemd 服务集成更好。

Systemd Timers 由两个主要组件组成:

  1. Timer 单元(.timer 文件):定义何时触发任务。

  2. Service 单元(.service 文件):定义要执行的实际任务。

当 Timer 单元触发时,它会启动相应的 Service 单元,这种分离允许更灵活的配置和管理。

第一步,创建需要执行的脚本文件。

这里目的是要检测 MySQL 服务是否启动,如果未启动,则尝试重启并再次检测,脚本路径比如在 /home/shell/mysql_restart.sh 下,内容参考如下:

bash 复制代码
#!/bin/bash

# 检查MySQL进程是否在运行
echo "检查MySQL进程是否在运行..." >> mysql_restart.log
if ! pgrep -x "mysqld" > /dev/null ; then
    echo "MySQL进程未运行,正在尝试重启服务..." >> mysql_restart.log
    systemctl restart mysqld
    echo "MySQL重启命令已执行,接下来进入睡眠等待..." >> mysql_restart.log

    # 稍等一会儿再检查
    sleep 5

    # 再次检查MySQL进程
    echo "睡眠5秒后再次检查MySQL进程是否在运行..." >> mysql_restart.log
    if pgrep -x "mysqld" > /dev/null ; then
        echo "MySQL服务重启成功,当前运行中。" >> mysql_restart.log
    else
        echo "MySQL服务重启失败,请检查日志以获取更多信息。" >> mysql_restart.log
    fi
else
    echo "MySQL进程正在运行。" >> mysql_restart.log
fi

第二步,创建 Service 单元。

在路径 /etc/systemd/system 下,创建需要执行脚本的 Service 单元,比如 mysql_restart.service,内容参考如下:

bash 复制代码
[Unit]
Description=定时运行MySQL重启脚本

[Service]
Type=simple
ExecStart=/home/shell/mysql_restart.sh

第三步,创建 Timer 单元。

还是在路径 /etc/systemd/system 下,创建需要执行服务的 Timer 单元,比如 mysql_restart.timer,内容参考如下:

bash 复制代码
[Unit]
Description=定时运行MySQL重启脚本服务

[Timer]
# OnCalendar=houry
# Persistent=true
OnBootSec=1min
OnUnitActiveSec=30min

[Install]
WantedBy=timers.target

其中,OnBootSec 表示系统重启后多久开始执行定时任务;OnUnitActiveSec 表示当服务单元进入活动状态时多久执行一次定时任务。

第四步,加载服务并启动定时任务。

systemctl daemon-reload

systemctl enable mysql_restart.timer

systemctl start mysql_restart.timer

当然 Cron 定时任务还有很多其它的替代方法来实现,比如 Anacron、at 命令等,可以自行尝试,这里就不细展开说了,Good Luck!

相关推荐
彳亍1013 分钟前
实现倒计时数字在到达1后自动隐藏(2为最后可见数字),同时继续运行至-1再终止
jvm·数据库·python
lolo大魔王11 分钟前
Go 后端实战|Gin + GORM V2 + MySQL 企业级 API 项目开发(完整版)
mysql·golang·gin
云边云科技_云网融合16 分钟前
企业出海的 “数字丝绸之路“:SD-WAN 如何重构全球网络竞争力
大数据·运维·网络·人工智能
JZC_xiaozhong16 分钟前
2026年深圳企业如何统一管理ERP、MES、OA权限?身份识别与访问管理高效方案
大数据·运维·自动化·企业数据安全·数据集成与应用集成·权限治理·多系统权限管理
Hical_W21 分钟前
Hical 踩坑实录五部曲(五):Boost.MySQL 协程集成的 5 个坑
数据库·mysql·开源
X566123 分钟前
CSS如何处理SSR中CSS引入_在服务端渲染时提取关键CSS
jvm·数据库·python
福尔摩斯·柯南42 分钟前
Ubuntu 14.04/16.04/18.04/20.04/22.04/24.04/26.04全系列LTS长期支持版镜像IOS分享
linux·运维·ubuntu
哆哆啦001 小时前
使用 Obsidian + GitHub Actions + GitHub Pages 搭建内容发布流
数据库·笔记·github·obsidian
duke8692672141 小时前
PostgreSQL 中高效插入多对多关联数据的三种方案对比与最佳实践
jvm·数据库·python
迷枫7121 小时前
达梦数据库备份还原:物理备份、逻辑备份
数据库