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
- 上一篇: Linux防火墙仅允许指定IP或者IP段访问某个端口
- 下一篇: SSHFS远程文件系统