systemd.timer定时任务
一、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目录里面,新建一个youlv.service文件
[Unit]
Description=jciot service
[Service]
Type=simple
User=jciot
ExecStart=/usr/bin/python /opt/jciot.py
[Install]
WantedBy=multi-user.target
Note: service默认使用root权限,在ubuntu系会出现no modules found情况,使用安装modules的用户科解决
三、Timer 单元
- 定时器单元文件中必须包含一个 [Timer]
- 通过同时使用 OnBootSec= 与 OnUnitActiveSec= 指令, 就可以实现在系统启动后的某个时间点启动匹配单元, 并且之后每隔一段时间周期性的反复启动匹配单元
- 时间单位后缀:us(微秒), ms(毫秒), s(秒), m(分), h(时), d(天), w(周)。 如果省略了时间单位,那么表示使用默认单位"秒"
- Unit= 该定时器单元的匹配单元, 也就是要被该定时器启动的单元。默认值是 与此定时器单元同名的服务单元
/usr/lib/systemd/system目录里面,新建一个youlv.timer文件
[Unit]
Description=Run jciot
[Timer]
OnBootSec=2m
OnUnitActiveSec=2h
[Install]
WantedBy=timers.target
四、启动定时任务
systemctl start youlv.service
systemctl start youlv.timer
查看所有正在运行的定时器
systemctl list-timers