systemd.timer定时任务

所谓定时任务,就是未来的某个或多个时点,预定要执行的任务,比如每五分钟收一次邮件、每天半夜两点分析一下日志等等。
Linux 系统通常都使用 cron 设置定时任务,但是 Systemd 也有这个功能,而且优点显著。

  • 自动生成日志,配合 Systemd 的日志工具,很方便除错
  • 可以设置内存和 CPU 的使用额度,比如最多使用50%的 CPU
  • 任务可以拆分,依赖其他 Systemd 单元,完成非常复杂的任务
  • 可以设置微秒级的定时任务

零、mytimer.sh脚本

使用以下脚本mytimer.sh用于测试

#!/bin/bash
echo "Run time: $(date)" >> /root/mytimer.log

一、Systemd 单元

每个单元都有一个单元描述文件,它们分散在三个目录
/lib/systemd/system:系统默认的单元文件
/etc/systemd/system:用户安装的软件的单元文件
/usr/lib/systemd/system:用户自己定义的单元文件

二、Service 单元

每个服务单元文件都必须包含一个 [Service]
Type= 设置进程的启动类型。必须设为 simple(默认), exec, forking, oneshot, dbus, notify, idle 之一
ExecStart= 启动该服务时需要执行的 命令行
/usr/lib/systemd/system目录里面,新建一个mytimer.service文件

[Unit]
Description=mytimer service

[Service]
Type=simple
ExecStart=/root/mytimer.sh

[Install]
WantedBy=multi-user.target

注意: service默认使用root权限

三、Timer 单元

定时器单元文件中必须包含一个 [Timer]
通过使用OnCalendar= 与 AccuracySec= 指令,可以实现按日历时间定时执行mytimer.service,其中AccuracySec指定定时器默认的精度;
时间单位后缀:us(微秒), ms(毫秒), s(秒), m(分), h(时), d(天), w(周)。 如果省略了时间单位,那么表示使用默认单位"秒"
Unit= 该定时器单元的匹配单元, 也就是要被该定时器启动的单元。默认值是 与此定时器单元同名的服务单元
/usr/lib/systemd/system目录里面,新建一个mytimer.timer文件

[Unit]
Description=Run mytimer service

[Timer]
OnCalendar=*-*-* *:*:0/10
AccuracySec=1s
Unit=mytimer.service


[Install]
WantedBy=timers.target

四、启动定时任务

systemctl start mytimer.service
systemctl start mytimer.timer
systemctl enable mytimer.timer

查看所有正在运行的定时器

systemctl list-timers

链接:
systemd.timer — 定时器单元配置
systemd.service — 服务单元配置

标签: systemd, timer

添加新评论