crontab-ui

crontab-ui — удобная панель управления, которая позволяет прямо из браузера создавать и упавлять заданиями планировщика на сервере.

Заметка пишется после обращения одного из заказчиков, который активно занимается чат-ботами для популярных мессенджеров, а вот в командной строке и Linux’е в принципе, пока что толком не освоился.

В рамках заметки мы установим панель на сервер, закроем её авторизацией с помощью Nginx и настроим автоматический запуск окружения с помощью systemd. Работать будем на сервере с CentOS 7, при этом условимся, что Nginx на сервере уже установлен и запущен в работу.

Установка crontab-ui.

Для установки панели нам потребуется nodejs, в CentOS всё необходимое мы можем найти в EPEL репозитории:

# yum install epel-release
# yum install npm nodejs

1. Создаём пользователя в системе, от имени которого будет запускаться панель, от имени этого же пользователя на сервере будут создаваться cron задания. Пусть это будет tester.

2. Заходим на сервер от имени этого пользователя и ставим пакет:

# su - tester
$ npm install crontab-ui

3. Как только установка будет завершена, протестируем запуск:

$ ./node_modules/.bin/crontab-ui
Node version: 6.14.3
Crontab UI is running at http://127.0.0.1:8000

Если всё было сделано верно, на локальном интерфейсе и порте 8000 у нас появится nodejs сервис. Завершаем его работу, нажав Ctrl+C.

Crontab-ui systemd unit.

Для того, что бы панель запускалась автоматически, пишем простой .unit файл для systemd, размещаем его в /etc/systemd/system/crontab-ui.service

[Unit]
Description=crontab-ui interface
Documentation=https://github.com/alseambusher/crontab-ui
After=network.target

[Service]
Type=simple
User=tester
ExecStart=/var/www/tester/data/node_modules/.bin/crontab-ui --autosave
Restart=on-failure

[Install]
WantedBy=multi-user.target

Здесь мы указываем пользователя, от имени которого будет выполняться работа, прописываем путь до файла запуска самой панели. При запуске мы так же используем параметр —autosave, с которым crontab-ui автоматически будет сохранять в планировщике внесённые через панель изменения.

Сохраняем файл, и запускаем всё в работу:

# systemctl daemon-reload
# systemctl start crontab-ui

Убеждаемся что сервис запустился:

# ss -nlp | grep 8000
tcp LISTEN 0 128 127.0.0.1:8000 *:* users:(("node",pid=7873,fd=10))

Доступ и авторизация с Nginx.

Nginx у нас на сервере уже работает, так что создадим в нём отдельный конфиг (в моём случае /etc/nginx/vhosts/tester/cron.sysadmin.pm.conf) с поддоменом cron.sysadmin.pm, а в нём опишем следующее:

upstream backend {
server 127.0.0.1:8000;
keepalive 64;
}

server {
listen 1.2.3.4:443 ssl http2;
server_name cron.sysadmin.pm;
ssl_certificate "/var/www/httpd-cert/tester/cron.sysadmin.pm_le1.crtca";
ssl_certificate_key "/var/www/httpd-cert/tester/cron.sysadmin.pm_le1.key";
ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:!NULL:!RC4;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_dhparam /etc/ssl/certs/dhparam4096.pem;
auth_basic "Protected";
auth_basic_user_file httpasswd;

 location / {
  proxy_set_header X-Forwarded-Host $host;
  proxy_set_header X-Forwarded-Server $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_pass http://backend;
  proxy_http_version 1.1;
  proxy_pass_request_headers on;
  proxy_set_header Connection "keep-alive";
  proxy_store off;
 }
}

В этом конфиге описан бекенд, и отдельный server с уже настроенными ssl сертификатами и web авторизацией. Остаётся только создать пользователя (cronuser) и пароль для авторизации:

# printf "cronuser:$(openssl passwd -apr1)" > /etc/nginx/httpasswd

И можно перезапускать Nginx, а после проверять, всё ли работает хорошо. Если всё было сделано верно, при обращении к созданному нами поддомену, браузер попросит ввести логин и пароль, а после авторизации мы получим доступ к панели управления crontab-ui, где мы можем создавать, редактировать задания. Здесь же нам будет доступен импорт\экспорт заданий, и создание их резервных копий.

crontab-ui

Теперь, в случае если нам нужно активно работать с планировщиком, совсем не обязательно открывать терминал и работать с cron’ом из командной строки.

One thought on “crontab-ui

  1. Привет! Спасибо за статью! Пробовали ли рассылать нотификации от запускаемых тасок через open relay? Не получается настроить nodemailer: open relay использует STARTTLS, а nodemailer шлет защищенные алёрты только через 487 порт. Как передать это nodemailer’у, который используется crontab-ui?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *