发现了神器systemd-run
, 可以用来创建临时的服务和定时任务
目前在 wg-ops 中使用此命令创建定时任务进行DNS查询, 命令格式如下:
systemd-run -u <name> --collect --timer-property AccuracySec=10 --on-calendar *:*:0/30 <cmd>
-u
用来指定服务名称. name.timer
和name.service
会被创建出来. 如果不指定这个那么systemd-run
会自动生成一个ID. 可以从命令执行的输出中拿到ID.
--collect
无论任务是否成功都销毁临时服务与定时器.
--timer-property
用来指定定时任务的属性. 其中AccuracySec=
用于指示systemd多久检查一次任务触发时间.
--on-calendar
用来指定触发周期. *:*:0/30
表示每分钟0秒和30秒分别触发一次. 这个表达形式和cron有点不一样, 但是看起来稍微清晰一些. 奇怪的是没找到每隔30秒运行一次的选项. 尝试使用了OnActiveSec=
也不管用, timer执行一次之后就消失了.
因为是临时任务, 所以如果执行完成会被systemd回收. 使用systemctl stop
停止时也会被systemd回收. 如果不加--collect
, 若服务执行失败会保留. 这种情况下可以用systemctl reset-failed
手动改掉失败状态, 就会被systemd回收了.