我们有一个嵌入式目标环境(与主机构建环境分开)在其中systemd
运行,但没有在其中运行cron
。
我们还有一个脚本,在大多数系统下,我只需创建一个cron
条目即可每五分钟运行一次。
现在,我知道了如何在该目录下创建服务,systemd
但是此脚本是一个单步操作,完成后将退出。我想做的是让它在启动时立即运行(syslog.target
当然在之后),然后每五分钟运行一次。
阅读了systemd
计时器后,我创建了以下服务文件/lib/systemd/system/xyzzy.service
:
[Unit]
Description=XYZZY
After=syslog.target
[Service]
Type=simple
ExecStart=/usr/bin/xyzzy.dash
并等效/lib/systemd/system/xyzzy.timer
:
[Unit]
Description=XYZZY scheduler
[Timer]
OnBootSec=0min
OnUnitActiveSec=5min
[Install]
WantedBy=multi-user.target
不幸的是,启动目标时,计时器似乎未启动,因为的输出systemctl list-timers --all
不包含它。手动启动计时器单元似乎可以正常工作,但这应该在用户干预下自动运行。
我以为WantedBy
可以确保计时器单元已安装并正在运行,因此可以定期启动该服务。但是,我注意到multi-user.target.wants
目录实际上没有计时器的符号链接。
这是如何完成的systemd
?
计时器直到您真正启用它后才处于活动状态:
systemctl enable xyzzy.timer
如果要在重新启动之前查看其工作方式,也可以启动它:
systemctl start xyzzy.timer
在一个单独的目标环境中执行此操作时,您不一定能够在引导时轻松运行任意命令(但大概控制文件系统内容),您可以简单地在开发区域中创建相同的符号链接。该enable
命令将执行的操作。
例如(假设SYSROOT
标识目标文件系统的根目录):
ln -s ${SYSROOT}/lib/systemd/system/xyzzy.timer
${SYSROOT}/lib/systemd/system/multi-user.target.wants/xyzzy.timer
这将有效地将计时器单元置于的启用状态multi-user.target
,因此systemd
将从该目标启动它。
同样,通常,您的自定义文件将存储在中/etc/systemd/system/
。等效lib
目录旨在承载systemd
由软件包或操作系统安装的文件。
如果重要的是您的cron作业必须每5分钟准确运行一次,则应检查准确性,因为systemd的单调计时器会随着时间推移而滑动
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句