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


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.