Таймер не запускается командой userdata после перезагрузки

Описание проблемы:

При загрузке мы запускаем скрипт инициализации сервиса, показанный ниже. Скрипт является частью Instance User Data.

Этот скрипт копирует необходимые сервисы/таймеры в папку systemdи запускает таймер.

Время от времени после перезагрузки наши таймеры не работают и остаются в N/A.

Команда sudo systemctl restart cleanup.timerне помогает.

Работает только sudo systemctl 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.

Вопрос:

С чем может быть связана такая ситуация и как этого избежать?

2
задан 18 November 2021 в 09:03
2 ответа

Похоже, вы забыли enableтаймер.

systemctl start <unit>запускает этот таймер прямо сейчас (, т.е. когда вы впервые устанавливаете его и хотите, чтобы он работал).

systemctl enable <unit>не запускает модуль сейчас, но устанавливает соответствующие хуки, чтобы модуль запускался на основе того, что находится в файле модуля...

например. таймер запустится после перезагрузки из-за...

[Install]
WantedBy=timers.target

запуска сценария инициализации службы при каждой загрузке?

При загрузке запускаем скрипт инициализации сервиса... У нас есть этот сценарий инициализации службы :

. Очевидно, что он не работает успешно, потому что сценарий инициализации предположительно работает systemctl start cleanup.timer, но cleanup.timer не запустился или дал сбой в течение 11 часов.

Итак, я бы посмотрел журналы вокруг вашего скрипта инициализации, чтобы увидеть, что не получается и почему. Может быть, ваш скрипт инициализации запущен до того, как докер станет доступен или что-то в этом роде.

1
ответ дан 27 November 2021 в 11:42

Я еще не знаком с systemd, но, насколько я знаю, среда PATH еще недоступна при загрузке-, поэтому некоторые скрипты и программы сначала устанавливают среду PATH. Предполагая, что ваша служба запускается всякий раз, когда вы запускаете ее на консоли, так будет всегда.

0
ответ дан 1 December 2021 в 02:35

Теги

Похожие вопросы