Что делать, если вам понадобилось вызывать какой-то вебхук с определённым интервалом?

(О том, что такое вебхук, я рассказываю здесь — Что такое вебхук?)

Например, автоматически запускать скрипт рассылки раз в неделю в 9 утра по вторникам?

Или раз в минуту вызывать логику, проверяющую какое-то событие и рассылающую уведомления, если оно наступило?

Можно для этого использовать специальный сервис, например cronhooks.io и платить за это от $3 в месяц.

Но если у вас есть машина с Linux, например личный VPS сервер, или же Linux либо WSL на домашнем компьютере, вы можете сделать бесплатный аналог такого сервиса за 5 минут.

Для этого используем стандартный планировщик задач “cron”, который встроен в любой линукс. Здесь и далее “крон” это планировщик, а “кронтаб” это его конфигурация, список задач.

Добавляем вебхук в крон

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

Создаём папку для логирования.

mkdir /home/nex/coolproject/logs/

Открываем конфигурацию крона на редактирование.

crontab -e

Добавляем задачу в кронтаб.

* * * * * http https://flowxo.com/hooks/a/12345678 >> /home/nex/coolproject/logs/cron-webhook.log 2>&1

Не забываем в конце файла сделать перевод строки, иначе конфигурация не пройдёт проверку.

Готово!

При сохранении файла задача уже будет добавлена в планировщик и будет выполняться раз в минуту.

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

crontab -l

Расшифровка строки

Теперь разберём строку конфигурации.

* * * * * http https://flowxo.com/hooks/a/12345678 >> /home/nex/coolproject/logs/cron-webhook.log 2>&1
  1. Условие * * * * * говорит о том, что задача должна выполняться раз в минуту.

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

  2. http https://flowxo.com/hooks/a/12345678 — “дёргаем” вебхук с помощью утилиты HTTPie.

    Мне больше нравится HTTPie, но вы можете использовать Wget, CURL или другие варианты.

  3. >> /home/nex/coolproject/logs/cron-webhook.log — записываем вывод команды в конец файла cron-webhook.log.

    Двойные угловые скобки >> означают, что новые строки будут добавляться в конец файла.

    Таким образом мы сможем увидеть всю историю отправки вебхука.

  4. Странная комбинация 2>&1 говорит о том, что ошибки (2) будут перенаправлены в стандартный канал вывода (&1), а значит точно так же попадут в наш лог, как и обычный вывод команды.

Разбиваем логи по запускам

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

Для этого поменяем >> на > и добавим дату в название файла.

* * * * * http https://flowxo.com/hooks/a/12345678 >> /home/nex/coolproject/logs/`date +\%Y-\%m-\%d_\%H-\%M-\%S`-cron-webhook.log 2>&1

Раскладка клавиатуры

Ещё совет. Будьте очень аккуратны при вводе команд, следите за раскладкой клавиатуры.

Если вы случайно вместо crontab -e введёте crontab -t — русская “е” находится на той же клавише что английская “t” — то моментально уничтожите текущую конфигурацию.

И если вы не сделали запасные копии кронтаба, то восстановить все команды бывает очень сложно.

Вот и всё. Удачи!