Что делать, если вам понадобилось вызывать какой-то вебхук с определённым интервалом?
(О том, что такое вебхук, я рассказываю здесь — Что такое вебхук?)
Например, автоматически запускать скрипт рассылки раз в неделю в 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
-
Условие
* * * * *
говорит о том, что задача должна выполняться раз в минуту.Если требуется выполнять задачу по другому расписанию, нужно изучить синтаксис кронтаба и составить эту часть самому или использовать генератор кронтаба.
-
http https://flowxo.com/hooks/a/12345678
— “дёргаем” вебхук с помощью утилиты HTTPie.Мне больше нравится HTTPie, но вы можете использовать Wget, CURL или другие варианты.
-
>> /home/nex/coolproject/logs/cron-webhook.log
— записываем вывод команды в конец файлаcron-webhook.log
.Двойные угловые скобки
>>
означают, что новые строки будут добавляться в конец файла.Таким образом мы сможем увидеть всю историю отправки вебхука.
-
Странная комбинация
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” — то моментально уничтожите текущую конфигурацию.
И если вы не сделали запасные копии кронтаба, то восстановить все команды бывает очень сложно.
Вот и всё. Удачи!