Предотвращение запуска таймера systemd при запуске

Я переношу свои кронабы на блоки таймера systemd. Все они выглядят примерно так:

.timer файл:

[Unit] Description=timer that uses myjob.service [Timer] OnCalendar=*-*-* *:00:00 Unit=myjob.service [Install] WantedBy=timers.target 

.service file:

 [Unit] Description=Script that runs myjob.sh [Service] ExecStart=/home/user/myjob.sh 

Мои таймеры работают, но они также выполняются при перезагрузке системы. Я хотел бы, чтобы мои события OnCalendar выполнялись только в указанное время, а не в любое случайное время, когда я перезагружаю компьютер. Есть идеи?


ОБНОВЛЕНИЕ: Я решил эту проблему, переведя свои «пользовательские» таймеры в корневые / системные таймеры.

  1. Я отключил все мои файлы .service и .timer и вывел их из своего домашнего каталога в / etc / systemd / system.

  2. Я добавил раздел «User =» в каждый служебный файл, так что мои скрипты запускались обычным пользователем, а не как root.

Теперь мои таймеры не запускаются при запуске системы, и у меня также возникали проблемы со спорадическим запуском при входе в систему через ssh. Теперь это также было решено, что они находятся под контролем учетной записи root, но запуск моих сценариев по-прежнему выполняется как PID обычного пользователя, который сохраняет атрибуты собственности моих файлов. Задача решена.

  • Периодически выполняемый btrfs-scrub
  • Поручить выполнить блок после успешного завершения работы другого устройства
  • Удаление таймера, созданного с помощью systed-run --on-calendar
  • Есть ли способ узнать, когда будет запускаться системный таймер?
  • использование таймеров systemd вместо cron
  • systemd: Как выполнять задание как периодически, так и один раз при завершении работы системы?
  • «Systemctl list-timers» показывает последние выполненные даты, которые далеки в будущем
  • Cron vs systemd таймеры
  • 3 Solutions collect form web for “Предотвращение запуска таймера systemd при запуске”

    Я решил эту проблему, переведя свои «пользовательские» таймеры в корневые / системные таймеры.

    1. Я отключил все мои файлы .service и .timer и вывел их из своего домашнего каталога в / etc / systemd / system.

    2. Я добавил раздел «User =» в каждый служебный файл, так что мои скрипты запускались обычным пользователем, а не как root.

    Теперь мои таймеры не запускаются при запуске системы, и у меня также возникали проблемы со спорадическим запуском при входе в систему через ssh. Теперь это также было решено, что они находятся под контролем учетной записи root, но запуск моих сценариев по-прежнему выполняется как PID обычного пользователя, который сохраняет атрибуты собственности моих файлов. Задача решена.


    ОП опубликовал это как редактирование вопроса, поэтому я воспроизвел его здесь.

    В соответствии с документацией вы должны изменить свою конфигурацию на Persistent=false или удалить Persistent вообще, потому что она по умолчанию неверна.

    У меня также была такая же проблема, и я не мог понять, почему единицы всегда будут запускаться при запуске, независимо от параметра Persistent в файле .timer, и мне потребовалось некоторое время, но я, наконец, нашел причину (указал в правильном направлении by @alexander комментарий Толкачева).

    Проблема в том, что я всегда включал что-то вроде WantedBy=basic.target в разделе [Install] файла .service (потому что его часть стандартной пасты для копирования systemd). Оказывается, это фактически заставляет блок запускаться всякий раз, когда basic.target (aka system boot).

    https://www.freedesktop.org/software/systemd/man/systemd.unit.html#WantedBy= https://www.freedesktop.org/software/systemd/man/systemd.special.html#basic.target

    Я подозреваю, что OP непреднамеренно решила проблему, отключив старый .service (который вы должны сделать, чтобы удалить символическую ссылку, созданную WantedBy ), и либо опустить раздел [Install] при повторном написании, либо никогда не запускать systemctl enable .

    TLDR; Вы не хотите раздел [Установить] в файле .service, который запускается файлом .timer.

    Linux и Unix - лучшая ОС в мире.