Базовый таймер systemd не будет работать

Вопрос или проблема

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

/etc/systemd/system/helloworld.timer   
[Unit]
Description="Скрипт Hello World"
    
[Service]
ExecStart=/usr/local/bin/helloworld.sh

/etc/systemd/system/helloworld.service  
[Unit]
Description="некоторое"

[Timer]
OnUnitInactiveSec=24мин
Unit=helloworld.service

[Install]
WantedBy=multi-user.target

После этого я включил его, используя sudo systemctl daemon-reload и sudo systemctl enable --now helloworld.timer. Проблема в том, что статусы запуска говорят, что они не работают. Это возвращает мне:

helloworld.timer - "некоторое"
Loaded: загружено (/etc/systemd/system/helloworld.timer; включено; предустановка: включено)
Active: активен (истек) с вт, 2024-11-26 15:00:03 CET; 2мин 27с назад
Trigger: нет данных

helloworld.service - "Скрипт Hello World"
Loaded: загружено (/etc/systemd/system/helloworld.service; статично)
Active: неактивен (мертв)

Интересно, что запуск службы с помощью sudo systemctl start helloworld.service заставляет таймер работать нормально. Использование OnCalendar вместо OnUnitActiveSec или OnUnitInactiveSec также заставляет его работать. Установка типа службы в oneshot и WantedBy=timers.target не помогает.

Вы перепутали содержание файлов .timer и .service, поменяйте расширения, и всё будет работать. (Файл .timer должен содержать раздел [Timer], и наоборот)

Ответ или решение

Почему таймер systemd не работает и как это исправить

Проблема, описанная вами, связана с неправильным распределением конфигурационных директив между файлами таймера и сервиса в systemd. Да, вы правильно заметили, что содержимое файлов таймера и сервиса перепутано. Давайте разберем эту ситуацию более подробно.

Что такое systemd таймеры?

Systemd таймеры предназначены для планирования выполнения различных задач, таких как запуск скриптов или услуг, в определенные моменты времени или через определенные интервалы. Таймеры особенно полезны для выполнения задач, требующих периодического выполнения, без необходимости вручную запускать их или настраивать cron.

Описание текущей конфигурации

Вы создали два файла:

  1. helloworld.timer
    • Это файл, который должен содержать секцию [Timer].
  2. helloworld.service
    • Это файл, предназначенный для выполнения вашего скрипта.

Однако в вашем примере:

  • В helloworld.timer указана секция [Service], которая должна быть в файле сервиса.
  • В helloworld.service находится секция [Timer], что неверно.

Правильная конфигурация

Для правильной работы вам необходимо исправить порядок размещения секций в ваших конфигурационных файлах. Вот как они должны выглядеть:

  1. /etc/systemd/system/helloworld.timer

    [Unit]
    Description="Hello World timer"
    
    [Timer]
    OnUnitInactiveSec=10min
    Unit=helloworld.service
    
    [Install]
    WantedBy=timers.target
  2. /etc/systemd/system/helloworld.service

    [Unit]
    Description="Hello World script"
    
    [Service]
    Type=oneshot
    ExecStart=/usr/local/bin/helloworld.sh

Шаги для исправления

После внесения изменений, выполните следующие команды для перезагрузки демона systemd и перезапуска таймера:

sudo systemctl daemon-reload
sudo systemctl enable --now helloworld.timer

Проверка состояния

Теперь вы можете проверить состояние вашего таймера и сервиса с помощью следующих команд:

systemctl status helloworld.timer
systemctl status helloworld.service

Убедитесь, что таймер активен, а служба должна стать active (exited) после выполнения скрипта.

Заключение

Использование таймеров systemd может значительно упростить автоматизацию задач на вашем сервере. Убедитесь, что вы размещаете секции в правильных конфигурационных файлах и проверяете статус всех компонентов после внесения изменений. Если у вас возникнут дополнительные вопросы или проблемы, обязательно вернитесь за помощью!

SEO-оптимизация:
  • Ключевые слова: systemd, таймер, служба, конфигурация, автоматизация задач, Linux, ошибки.
  • Заголовки: Используйте заголовки типа H2 и H3 для структурирования текста и облегчения его восприятия.
  • Внутренние ссылки: Укажите ссылки на дополнительные материалы или документацию по systemd, если это уместно.
Оцените материал
Добавить комментарий

Капча загружается...