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


12

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

linux 

Ответы:


14

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

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

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

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

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


2
Папки cron. * очень специфичны для дистрибутивов. crontab - это универсальный способ запуска элементов cron через определенные промежутки времени.
— MDMarra

Правда. Я просто привожу пример. В любом случае crontab дает вам гораздо больше контроля.
— Натан Осман


7

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

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

  watch --interval=3600 command

1
Выполняет ли команда каждые 1 час; или он запускает команду, подождите 1 час, а затем снова запустите? Обратите внимание, что это имеет большое значение, если команда занимает очень много времени. (Я спрашиваю, потому что это не было ясно из
— справочной

На самом деле не так сложно попробовать это самостоятельно.
— Миморали


2

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

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

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

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

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

:wq



1

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

while true; do
   # do stuff
   sleep $[60 * 60]
done

Это не будет работать как #do Stuff, если для его выполнения требуется 3599 секунд, а затем в соответствии с требованием скрипт должен вызвать следующую секунду в палатах и ​​сбросить часы на 0, но в этом случае он остановится на 3599-й секунде и затем продолжайте спать в течение следующих 3600 секунд. Там не будет совпадение, но неожиданный разрыв между итерациями. Здесь я предполагаю, что пользователь пытается выполнять работу каждый час без cron.
— Манной

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.