每次启动时都运行服务初始化脚本?

每次启动时都运行服务初始化脚本?

问题描述:

在启动时,我们会触发如下所示的服务初始化脚本。该脚本是 Instance 的一部分User Data

该脚本将必要的服务/计时器复制到systemd文件夹并启动计时器。

有时重启后我们的计时器不工作并且停留在N/A

sudo systemctl restart cleanup.timer命令没有帮助。

只有 sudosystemctl stop cleanup.timer然后才sudo systemctl start cleanup.timer有效。

我们不只在特定定时器上遇到此问题。我们有许多定时器,它们具有几乎相同的结构和初始化服务。所有定时器都已加载,但其中一些定时器可能处于active (elapsed)未工作状态。

我们的设置:

我们跑Ubuntu 18.04 LTS

我们有这个服务初始化脚本:

sudo cp <BASIC PATH>/services/cleanup.service /etc/systemd/system/cleanup.service
sudo cp <BASIC PATH>/services/cleanup.timer /etc/systemd/system/cleanup.timer
sudo systemctl daemon-reload
sudo systemctl start cleanup.timer

和这个cleanup.service

[Unit]
Description=Service to cleanup things
Requires=docker.service
After=docker.service

[Service]
ExecStart=<<SHELL COMMAND>>

和这个cleanup.timer

[Unit]
Description=Timer for service to cleanup things

[Timer]
OnBootSec=1min
OnUnitActiveSec=1800sec
AccuracySec=5sec

[Install]
WantedBy=timers.target

现在检查这些命令:

> sudo systemctl list-timers
NEXT                         LEFT          LAST                         PASSED       UNIT                         ACTIVATES
n/a                          n/a           n/a                          n/a          cleanup.timer                cleanup.service
> sudo systemctl status cleanup.timer
● cleanup.timer - Timer for service to cleanup things
   Loaded: loaded (/etc/systemd/system/cleanup.timer; disabled; vendor preset: enabled)
   Active: active (elapsed) since Wed 2021-11-17 21:07:22 UTC; 11h ago
  Trigger: n/a

Nov 17 21:07:22 ip-XX-XX-XX-XX systemd[1]: Started Timer for service to cleanup things.

问题:

造成这种情况的原因是什么以及如何避免它?

答案1

看起来你忘记了enable计时器。

systemctl start <unit>立即启动该计时器(即当您第一次安装它并希望它运行时)。

systemctl enable <unit>现在不启动该单元,但设置相关的挂钩,以便根据单元文件中的内容启动该单元...

例如计时器将在重启后启动,因为......

[Install]
WantedBy=timers.target

每次启动时都运行服务初始化脚本?

在启动时我们触发服务初始化脚本...我们有这个服务初始化脚本:

这显然没有成功运行,因为 init 脚本应该正在运行,systemctl start cleanup.timer但是 cleanup.timer 在 11 小时内没有运行或失败了。

因此,我会查看您的 init 脚本周围的日志,以查看失败的原因。可能是您的 init 脚本在 docker 可用之前运行,或者类似情况。

答案2

我对 systemd 还不太熟悉,但据我所知,PATH 环境在启动时尚不可用,因此一些脚本和程序会先设置 PATH 环境。假设您的服务在控制台上运行时会运行,那么情况总是如此。

相关内容