LINUX.ORG.RU

Запуск скрипта при загрузке, не чаще 1 раза в сутки.

 , ,


0

1

Каким образом можно реализовать, с помощью таймеров systemd запуск скрипта при загрузке, но не чаще, чем 1 раза в сутки. Т.е. получается первое включение ноутбука за сутки, должно запускать скрипт. Все остальные включения ноутбука за эти сутки, потворно запускать скрипт не должны.

Рекомендую использовать anacron, он как раз под это заточен. И насколько я помню, в Ubuntu так и сделано искаропки.

mord0d ★★★★★
()

может сделать что бы скрипт записывал в файлик последную дату запуска и при запуске скрипта он проверял больше ли текущая дата, чем дата в файлике. а сам запуск просто в кроне, через @reboot

Хотя возможно это «костыль»

romanlinux ★★★
()
Последнее исправление: romanlinux (всего исправлений: 1)
Ответ на: комментарий от romanlinux

Это скрипт путешественика во времени чтоб скрипт не сработал если оказался в прошлое?

manul91
()
Ответ на: комментарий от mord0d

Разумеется, нельзя.

У ТСа есть требование «только при загрузке».

Таймеры systemd — это надмножество cron и anacron. На них при всём желании нельзя сделать того, что не умеет systemd.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от electra2005

то рассмотрю крон

anacron не является заменой crond, он работает в связке с, также может работать с systemd.

По умолчанию во многих дистрибутивах anacron триггерится раз в сутки, проверяет свои задания, если прошло меньше времени, чем задано, откладывает их выполнение, если больше — выполняет. Хранит данные о последнем выполнении каждого задания на диске, потому внезапные ребуты ему не страшны.

mord0d ★★★★★
()
Ответ на: комментарий от intelfx

Сркрипт не должен запуститься спустя сутки, если ноутбук включен. Запуск нужен только при дальнещем его запуске.

electra2005
() автор топика
Ответ на: комментарий от electra2005

Тогда то, что ты хочешь, неосуществимо с помощью systemd.timer/cron/anacron без дополнительной логики.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Разумеется, нельзя.

У ТСа есть требование «только при загрузке».

Можно. Просто выставляешь триггер anacron в systemd на OnReboot (или как оно там в systemd, уже не помню), и он будет дёргаться только при загрузке. anacron — не демон, как часто будешь его дёргать, так часто он и будет сверять задания для выполнения.

mord0d ★★★★★
()

Они так не умеют. Пиши нормальный скрипт который при загрузке запускается и сохраняет своё время запуска где то в /var/tmp/ и всё при повторном запуске он смотрит какое время/дата там и какое сейчас если сутки прошли то выполняется, если нет то ничего не делает. Сам скрипт занеси в /etc/rclocal и пусть дёргается при загрузке https://www.troublenow.org/752/debian-10-add-rc-local/.

В этом случае systemd юнит просто прослойка будет.

Легче самому скрипт написать чем рыться в поисках рецепта для сисд с его 100500 параметрами.

anonymous
()
Ответ на: комментарий от intelfx

С дополнительной логикой это можно сделать и на systemd.

Дополнительная логика уже выходит за рамки возможностей systemd, или я что-то упустил?

У anacron своё "расписание" (условие раз в сколько времени нужно выполнять задание и само задание), каждый раз когда его триггерит crond или systemd, можно даже руками, он сверяет последнее время выполнения каждого задания и текущее время в системе (тут подвох в возможной смене часовых поясов и летнем/зимнем времени, но это мелочи), если прошедшее время превышает заданный интервал — задание запускается, если нет, то нет. Поэтому если триггерить anacron раз в час, а задание будет по условию раз в сутки, anacron выполнит его раз в сутки плюс (не минус) меньше часа, если его триггерить раз в неделю, он будет выполнять это задание раз в неделю, потому что это больше заданного интервала в одни сутки.

// Расписываю не столько для тебя, сколько для топикстартера.

mord0d ★★★★★
()
Ответ на: комментарий от electra2005

а запуск при загрузке имеется у anacron ?

Его запуск — не его задача, потому что он не демон. В vixie-cron это делается так:

@reboot  anacron

В systemd тоже как-то делается, у меня убунт под рукой нет чтобы посмотреть, но ты можешь почитать ман systemd.timer (или как он там зовётся, не помню), там есть OnCalendar, или какие-то другие опции расписания.

С rc, sysvinit, runit или OpenRC достаточно было бы просто написать сервис (в терминологии systemd — oneshot) и добавить его в автозапуск, это бы решило твою задачу, но с systemd тебе придётся раскуривать таймеры на предмет OnReboot, @reboot или как оно там называется, найдёшь в мане.

mord0d ★★★★★
()
Последнее исправление: mord0d (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.