我正在尝试在 Bionic 上创建和安装一对自定义的 systemd 计时器和服务单元,用于定期运行命令。我知道应该将文件放入/etc/systemd/system
然后我应该运行systemctl daemon-reload
,但是我不清楚是否需要启用或启动任何东西才能完全安装和“运行”计时器,以及我可以的几篇文章发现地址这一点都给出了不同的信息。
我的.timer
文件是:
[Unit]
Description=Run custom command periodically
[Timer]
Unit=my-custom-command.service
OnCalendar=*-*-* 0/8:00:00
[Install]
WantedBy=timers.target
Run Code Online (Sandbox Code Playgroud)
我的.service
文件是:
[Unit]
Description=Run a custom command
OnFailure=mail-systemd-failure@%n.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/custom-command
User=dedicated-user
Group=dedicated-user
Run Code Online (Sandbox Code Playgroud)
我读过的相互矛盾的文章是:
这篇文章说运行:
systemctl daemon-reload
systemctl enable $NAME.timer
systemctl start $NAME
Run Code Online (Sandbox Code Playgroud)
据我了解,后一个命令与 相同systemctl start $NAME.service
,我希望立即运行服务定义的命令,这不是我想要做的。
这个要点说只是运行:
systemctl daemon-reload
systemctl start $NAME.timer
Run Code Online (Sandbox Code Playgroud)这篇文章说运行:
systemctl enable $NAME.timer
systemctl start $NAME.timer
Run Code Online (Sandbox Code Playgroud)那么我是否启用和/或启动计时器(或其服务?),两者之间究竟有什么区别?根据单元文件是新安装还是在编辑后重新加载,我需要运行的命令是否会发生变化?
Per*_*uck 48
要在指定的时间或间隔运行一个单元,您需要两个单元:
按照惯例,定时器单元启动另一个具有相同名称的单元,即foo.timer
开始foo.service
。您可以通过Unit=other.service
在计时器单元中定义属性来覆盖它(就像您所做的那样)。
如果两个单元文件都被创建并放入,/etc/systemd/system
你需要systemd
通过发出
systemctl daemon-reload
Run Code Online (Sandbox Code Playgroud)
这使得systemd
重新加载所有单元文件并重新考虑它们的依赖关系,因为以某种方式systemd
缓存这些文件。因此,无论何时更改单元文件,都需要此命令。
之后,你需要启用的定时器单元:
systemctl enable foo.timer
Run Code Online (Sandbox Code Playgroud)
此命令仅在启动时启用自动启动(但尚未启动设备)。不要不启用服务单元,因为这将意味着启动服务在系统启动时(独立于任何计时器设置)。
现在下次启动时,计时器将启动。要立即启动它(无需启动),您将运行
systemctl start foo.timer
Run Code Online (Sandbox Code Playgroud)
从现在开始,只要时间到了,定时器单元就会启动服务单元。您可以将启用并开始与
systemctl enable --now foo.timer
Run Code Online (Sandbox Code Playgroud)
您可以(并且应该)不理会服务单元,即既不启用也不启动它。这现在由计时器单元处理。
要查看计时器和服务的当前状态,请发出
systemctl status foo.timer foo.service
Run Code Online (Sandbox Code Playgroud)
systemctl enable/disable
控制启动时的行为systemctl start/stop
立即控制行为enable
并没有暗示start
(同样没有disable
暗示stop
)。这可以用--now
开关覆盖。enable
和start
定时器单元,而不是服务单元systemctl daemon-reload
每次修改单元文件进一步阅读:
归档时间: |
|
查看次数: |
18964 次 |
最近记录: |