Скажем, у меня есть несколько скриптов cron, которые нужно запускать каждые 15 минут. Я мог бы заставить их работать:, */15 * * * *
но тогда они все бегут одновременно. Кажется глупым, что сервер простаивает несколько минут, а затем внезапно пытается выполнить дюжину сценариев одновременно.
Можно ли как-то запустить один сценарий в минуту 1, 16, 31, 46, а другой - в 2, 17, 32, 47?
Другими словами, я хочу, чтобы каждый сценарий запускался каждые 15 минут, но мне все равно, что он запускается конкретно на отметках четверти часа.
run-parts
присутствует также в системах Fedora / Red Hat.Самый простой способ сделать это - просто настроить команды для запуска, когда вы хотите, чтобы они:
Или вы можете написать скрипт для автоматической генерации соответствующих записей в crontab (чтобы избежать опечаток).
Некоторые версии cron (возможно, включая ту, которую вы используете) принимают расширенный синтаксис:
источник
Крон не очень хорош в том, что ты пытаешься сделать. Рассматривали ли вы написание сценария, который действует как демон, который в основном спит 15 минут, выполняет команду, а затем зацикливается?
источник
sleep 300
между каждым выполнением команды, собственное выполнение команды приведет к смещению времени; он может работать каждые 15:10, а не каждые 15:00. И если фоновый процесс умирает или система перезагружается, в отличие от этогоcrond
, он не будет автоматически перезагружаться. Есть способы «демонизировать» фоновый процесс, но тогда вы в значительной степени повторно реализуетеcrond
.run-parts
который поставляется с большинством установок cron, чтобы сделать это специально. Смотрите ответ @ AndrewSchulman.Во многих дистрибутивах есть /etc/cron.d/cronhourly, для которого все скрипты внутри запускаются ежечасно. Вы даже можете указать порядок, начав их с последовательных чисел, например, 01scriptA 02scriptB - это должно быть тривиально, если вы знаете, что cron уже создал «cronhourlybyfour», как мы его называем на основе linux-дистрибутива Smoothwall :)
Слово предупреждения: здесь используются части выполнения, как предлагалось ранее, и части выполнения НЕ любят сценарии с. в названии, поэтому не называйте его «deletehomefolders.sh», называйте его «01deletehomefolders» и убедитесь, что вы начинаете с правильного #! строка для всего, что вы собираетесь интерпретировать ваш сценарий.
источник