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, где мы можем создавать, редактировать задания. Здесь же нам будет доступен импорт\экспорт заданий, и создание их резервных копий.
Теперь, в случае если нам нужно активно работать с планировщиком, совсем не обязательно открывать терминал и работать с cron’ом из командной строки.
Привет! Спасибо за статью! Пробовали ли рассылать нотификации от запускаемых тасок через open relay? Не получается настроить nodemailer: open relay использует STARTTLS, а nodemailer шлет защищенные алёрты только через 487 порт. Как передать это nodemailer’у, который используется crontab-ui?