Как запускать скрипт каждые 64 часа?

Похоже, вы помещаете контент, который должен быть в /etc/hostsв /etc/host.conf.

Ваш синтаксис выглядит нормально, поэтому, если вы поместите правильный контент в правильные файлы, я думаю, вы получите ожидаемые результаты.

24
19.09.2021, 09:33
4 ответа

Если вы новичок, я предлагаю, возможно, использовать crontab-интерфейс, например crontab.guru для понимания crontab.

Однако, как и в вашем случае, настройка часа допускает значения только от 0 до 23, поэтому здесь вы не можете использовать crontab.

Вместо этого я бы предложил использовать at. В вашем случае я бы, вероятно, использовал что-то вроде:

at now + 64 hours

, а затем введите команду или

echo "<your command>" | at now + 64 hours

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

Я настоятельно рекомендую прочитать справочную страницу at, так как она довольно исчерпывающая.

27
19.09.2021, 10:12

cron предназначен для запуска вещей по событиям даты или времени, т. е. каждое 1-е число месяца или недели или каждый третий час дня соответственно.

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

Вам понадобятся два файла: служебный файл для запуска скрипта и файл таймера для управления событиями.

$cat /etc/systemd/system/myscript.service

[Unit]
Description=this service runs my script

[Service]
ExecStart=/full/path/to/myscript.sh

#[Install]
#WantedBy=multi-user.target

Эта служба просто выполняет скрипт, не проверяя, успешно ли он выполнился. При необходимости включите службу через systemctl enable myscript.service, что означает, что она будет выполняться один раз во время загрузки -. Я прокомментировал это, потому что таймер будет заботиться о событиях загрузки. Вы можете запустить свой скрипт вручную systemctl start myscript.service.


$cat /etc/systemd/system/myscript.timer

[Unit]
Description=this timer runs myscript.service every 64h

[Timer]
OnBootSec=120
OnUnitActiveSec=64h


[Install]
WantedBy=timers.target

Это таймер для запуска myscript.serviceкаждые 64 часа с момента последней активации службы, а также через две минуты после загрузки (, чтобы убедиться, что система находится в правильном состоянии для запуска службы ). ]. Обратите внимание, что таймер не запоминает 64 часа, если вы перезагружаете/выключаете питание. Включите и запустите таймер соответствующим образом:

systemctl enable myscript.timer
systemctl start myscript.timer

Поскольку таймер запускается только после загрузки или после последней активации устройства, вам придется запустить службу один раз, чтобы убедиться, что таймер работает:

systemctl start myscript.service

Проверьте состояние таймеров с помощью

.
systemctl list-timers
26
19.09.2021, 10:05

64 часа — это 2 и 2/3 дня, поэтому 3 *64 часа = 192 часа = 8 дней. Таким образом, вы могли бы почти сделать

0 0  1-25/8 * * foo
0 16 3-27/8 * * foo
0 8  6-30/8 * * foo

за исключением того, что вы получите короткий шаблон в конце месяца (если в месяце 30 дней, то между запуском в 08 :00 30-го числа и запуском в 00 будет только 16 часов. :00 1 числа; если в месяце 31 день, то будет 40 часов; если в месяце 28 дней, между запуском в 16 :00 27-го числа и в 00 :00 1-го числа будет 32 часа; если в месяце 29 дней, то будет 56 ), а также все будет смещаться на 1 час всякий раз, когда в вашей местности переходит на летнее время (или выходит из него ).

Не совсем соответствует вашим спецификациям, (и я поддерживаю любые другие ответы, которые соответствуют ), но это интересное упражнение в выполнении.

6
20.09.2021, 03:25

Удивлен, что никто не упомянул ни одну из:-

Анакрон

Он входит в стандартную комплектацию большинства дистрибутивов.

0
22.09.2021, 19:06

Теги

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