заставлять команду выполняться один раз в час

12

У меня есть индексатор для sphinx, и я хочу, чтобы он запускался раз в час в Linux. Как бы я это сделал?


источник

Ответы:

14

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

cron это демон, встречающийся в большинстве систем * nix, который запускает запланированные команды с заданными интервалами.

Вы добавляете скрипт в список, копируя его в папку по вашему выбору:

  • cron.daily
  • cron.hourly
  • cron.monthly
  • cron.weekly

Эти папки обычно находятся в /etcпапке.

Натан Осман
источник
2
Папки cron. * очень специфичны для дистрибутивов. crontab - это универсальный способ запуска элементов cron через определенные промежутки времени.
MDMarra
Правда. Я просто привожу пример. В любом случае crontab дает вам гораздо больше контроля.
Натан Осман
9

хрон .

Печеньковый монстр
источник
и используйте crontab для редактирования файла crontab ... см. crontabrocks.org для хорошего вступления
Даг Харрис
7

Просто чтобы быть другим -

в зависимости от ваших потребностей вы можете использовать команду Watch.

  watch --interval=3600 command
Bryan
источник
1
Выполняет ли команда каждые 1 час; или он запускает команду, подождите 1 час, а затем снова запустите? Обратите внимание, что это имеет большое значение, если команда занимает очень много времени. (Я спрашиваю, потому что это не было ясно из
справочной
На самом деле не так сложно попробовать это самостоятельно.
Миморали
2

Вы отредактируете файл cron, введя команду crontab -e

который переводит вас в редактор 'vi' (для текущей версии Linux и FreeBSD).

затем введите следующее: (введите «i» для вставки)

00 * * * * /path/to/sphinx_indexer.exe

затем сохраните и выйдите (нажмите «esc», затем введите следующее)

:wq
marklark
источник
1

Если вам просто нужно это время от времени, а не постоянно, как вы получаете cron, и watchрешение недостаточно гибкое, вы также можете использовать старые добрые сценарии bash:

while true; do
   # do stuff
   sleep $[60 * 60]
done
Grumbel
источник
Это не будет работать как #do Stuff, если для его выполнения требуется 3599 секунд, а затем в соответствии с требованием скрипт должен вызвать следующую секунду в палатах и ​​сбросить часы на 0, но в этом случае он остановится на 3599-й секунде и затем продолжайте спать в течение следующих 3600 секунд. Там не будет совпадение, но неожиданный разрыв между итерациями. Здесь я предполагаю, что пользователь пытается выполнять работу каждый час без cron.
Манной