Настройка cron (заданий по расписанию) на VDSina
Хочу себе такие же кнопкиНастройка cron (заданий по расписанию) на VDSina
Что вы получите:
- Понимание, как работает планировщик cron и зачем он нужен в реальном сервере.
- Умение создавать, редактировать и проверять расписания задач без ошибок.
- Навык отладки и мониторинга выполненных заданий, чтобы ваш сервис работал без сбоев.
1. Почему cron – ваш лучший помощник
Представьте, что сервер — это офисный работник, а cron — его личный секретарь. Секретарь записывает в календарь, когда нужно выполнить важные дела: отправить отчёт, очистить временные файлы, проверить обновления. Вы просто задаёте правила, а cron делает всё автоматически, даже когда вы спите.
На 🏰 VDSina (виртуальный выделенный сервер) cron уже установлен в большинстве образов Linux (Ubuntu, Debian, CentOS). Вам остаётся лишь сконфигурировать расписание под свои задачи.
2. Основные понятия
| Термин | Описание | Пример |
|---|---|---|
| cron | Демон‑служба, которая каждый минуту проверяет таблицу crontab и запускает нужные команды. | cron запускает скрипт backup.sh каждый день в 02:00. |
| crontab | Таблица расписаний, в которой каждая строка — отдельное задание. | 0 2 * * * /home/user/backup.sh |
| минута, час, день месяца, месяц, день недели | Пять полей, определяющих, когда запускать задание. | 30 14 * * 1-5 → каждый будний день в 14:30. |
| специальные строки | @reboot, @yearly, @monthly, @weekly, @daily, @hourly. |
@reboot /usr/bin/python3 /home/user/start.py |
Все поля могут принимать звёздочку (*) — «любое значение», а также список, диапазон и шаг (*/5).
3. Как открыть свой crontab
crontab -e
- При первом запуске система предложит выбрать редактор (vim, nano, etc.). Выбирайте тот, с которым вам удобно.
- Файл открывается с комментариями‑подсказками. Не удаляйте их, пока не разберётесь.
Важно: каждый пользователь имеет свой отдельный crontab. На 🏰 VDSina вы, скорее всего, работаете под пользователем root или обычным user. Если хотите отредактировать crontab другого пользователя, используйте crontab -e -u username (только от root).
4. Синтаксис строки задания
* * * * * команда_для_выполнения # комментарий
│ │ │ │ │
│ │ │ │ └─ День недели (0‑7) (воскресенье = 0 или 7)
│ │ │ └───── Месяц (1‑12)
│ │ └─────── День месяца (1‑31)
│ └───────── Час (0‑23)
└─────────── Минута (0‑59)
Примеры:
| Строка | Что делает |
|---|---|
0 3 * * * /usr/local/bin/clean_tmp.sh |
Каждый день в 03:00 запускает скрипт очистки /tmp. |
*/15 * * * * /usr/bin/php /var/www/site/artisan schedule:run >> /dev/null 2>&1 |
Каждые 15 минут запускает Laravel‑scheduler. |
30 22 * * 1 /home/user/weekly_report.sh |
По понедельникам в 22:30 отправляет отчёт. |
@reboot /usr/bin/python3 /home/user/start_server.py |
При старте сервера сразу запускает Python‑приложение. |
5. Практические нюансы на VDSina
5.1. Путь к исполняемому файлу
VDSina использует minimal‑install образ, где переменные окружения могут отличаться от вашего пользовательского ~/.bashrc. Чтобы гарантировать, что команда найдёт нужный исполняемый файл, указывайте полный путь:
* * * * * /usr/bin/python3 /home/user/scripts/task.py >> /home/user/logs/task.log 2>&1
5.2. Перенаправление вывода
>> /path/to/log.log— добавлять вывод в файл.2>&1— перенаправлять ошибки в тот же файл.
Если вы не хотите, чтобы cron отправлял письма с выводом, отправляйте всё в /dev/null:
0 0 * * * /usr/bin/apt-get update >> /dev/null 2>&1
5.3. Переменные окружения
В начале crontab можно задать переменные, которые будут доступны всем заданиям:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=you@example.com # куда отправлять письма с выводом
5.4. Проверка синтаксиса
После сохранения файла cron автоматически проверит синтаксис. Если будет ошибка, вы увидите сообщение в терминале. Чтобы проверить вручную, используйте:
crontab -l # вывести текущие задания
5.5. Логи cron
По умолчанию в Ubuntu/Debian логи находятся в /var/log/syslog. Фильтруйте их:
grep CRON /var/log/syslog
В CentOS/AlmaLinux в /var/log/cron.
6. Пример полного crontab для типичного проекта на VDSina
# ------------------------------
# Пользователь: root
# Описание: задачи проекта "MySite"
# ------------------------------
# Путь к исполняемым файлам
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=admin@mysite.com
# 1. Ежедневный бэкап базы данных в 02:30
30 2 * * * /usr/bin/mysqldump -u dbuser -p'StrongPass' mydb > /var/backups/db_$(date +\%F).sql 2>> /var/log/cron_errors.log
# 2. Очистка временных файлов каждые 6 часов
0 */6 * * * /usr/local/bin/clean_tmp.sh >> /var/log/clean_tmp.log 2>&1
# 3. Запуск Laravel‑scheduler каждую минуту
* * * * * /usr/bin/php /var/www/mysite/artisan schedule:run >> /dev/null 2>&1
# 4. Перезапуск nginx после перезагрузки сервера
@reboot /usr/sbin/service nginx restart >> /var/log/nginx_restart.log 2>&1
Совет: храните скрипты в отдельной директории, например
/home/youruser/scripts/, и делайте их исполняемыми (chmod +x script.sh).
7. Отладка и мониторинг
-
Проверка статуса службы
systemctl status cron # Ubuntu/Debian systemctl status crond # CentOS/AlmaLinux -
Тестовый запуск
Если нужно убедиться, что скрипт работает, запустите его вручную:
/usr/local/bin/clean_tmp.sh -
Логи
- Ошибки cron →
/var/log/syslog(Ubuntu) или/var/log/cron(CentOS). - Вывод скриптов → файлы, указанные в
>>.
- Ошибки cron →
-
Отправка почты
Если вы задали
MAILTO, cron будет отправлять письмо с выводом. Убедитесь, что на 🏰 VDSina установлен MTA (например,postfix).
8. Часто задаваемые вопросы
| Вопрос | Ответ |
|---|---|
| cron не запускает скрипт | Проверьте, что скрипт имеет права +x и указаны полные пути. |
| Получаю письма с ошибкой “Permission denied” | Скрипт пытается писать в директорию, к которой у пользователя нет прав. Используйте chmod или chown. |
| Как задать задание только в будние дни? | * * * * 1-5 command – дни недели от 1 (понедельник) до 5 (пятница). |
| Нужен ли перезапуск cron после изменения crontab? | Нет, cron автоматически перечитывает файл после сохранения. |
| Можно ли задать несколько команд в одной строке? | Да, разделяйте их && (последовательно) или ; (независимо). Пример: 0 0 * * * cd /var/www && git pull && php artisan migrate. |
9. Полезные ресурсы
- Официальная документация cron для Ubuntu: https://help.ubuntu.com/community/CronHowto?partner=5095
- Руководство по crontab для CentOS: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/7.8_single_page/#cron?partner=5095
- Статья о лучших практиках планировщика на VDSina: https://vdsina.ru/blog/cron-best-practices?partner=5095
Практика для закрепления
-
Создайте задание, которое будет каждый день в 04:15 удалять файлы старше 7 дней из каталога
/var/www/tmp.
Подсказка: используйтеfind /var/www/tmp -type f -mtime +7 -delete. -
Настройте тестовый cron, который каждые 2 минуты будет писать текущую дату и время в файл
/home/you/cron_test.log. Проверьте, что запись происходит. -
Сделайте резервную копию базы MySQL каждый понедельник в 01:00, сохраняйте файл в
/backups/mysql/с датой в имени. Убедитесь, что пароль не хранится в открытом виде в crontab (подумайте о файле.my.cnf). -
Отладка: ваш скрипт
script.shпишет ошибку «command not found», когда его запускает cron, но работает вручную. Что проверить? -
Эксперимент: используйте специальную строку
@rebootдля запуска скриптаstart_services.shпосле каждой перезагрузки сервера. Как проверить, что он выполнен?
Поздравляем! Вы теперь умеете полностью управлять планировщиком cron на VDSina, автоматизировать рутинные операции и поддерживать сервер в стабильном состоянии. Не бойтесь экспериментировать – каждый новый скрипт делает ваш сервис более надёжным и гибким. Удачной автоматизации!
Введение: чем VDS отличается от шаред-хостинга и зачем это веб-мастеру
Как правильно выбрать тариф: CPU, RAM, NVMe или SSD, канал
Выбор операционной системы: почему Ubuntu 22.04/24.04 — стандарт индустрии
Регистрация домена и первичная настройка DNS-записей (A, AAAA, CNAME)
Генерация SSH-ключей на локальном компьютере (Windows/Mac/Linux)
Добавление публичного ключа на сервер и первый вход по SSH
Отключение входа по паролю и запрет авторизации для root
Смена стандартного порта SSH для снижения шума в логах
Создание основного рабочего пользователя с правами sudo
Базовое обновление системы и установка необходимых утилит (curl, wget, git, htop)
Настройка часового пояса и синхронизация времени (NTP)
Установка и базовая настройка фаервола UFW
Разрешение только необходимых портов (SSH, HTTP, HTTPS)
Установка Fail2Ban для защиты от перебора паролей
Настройка правил Fail2Ban для SSH и веб-сервера
Знакомство с Docker: установка движка и CLI
Установка Docker Compose для управления мульти-контейнерными приложениями
Основы изоляции: почему каждый проект должен быть в своем контейнере
Подготовка файловой структуры сервера для удобного хранения проектов
Развертывание Nginx как обратного прокси-сервера через Docker
Настройка конфигурации Nginx для статических сайтов
Установка PHP-FPM в отдельном контейнере
Связка Nginx и PHP-FPM через внутреннюю Docker-сеть
Оптимизация настроек PHP-FPM (pm.max_children, memory_limit) под нагрузку
Установка MariaDB/MySQL в изолированном контейнере
Безопасное хранение паролей от БД через переменные окружения (.env)
Подключение к базе данных из внешнего клиента (DBeaver/Navicat) через туннель
Установка Redis для кэширования запросов и сессий
Интеграция Redis с PHP-приложением для ускорения работы
Автоматическая выдача SSL-сертификатов через Certbot (Let's Encrypt)
Настройка автопродления SSL-сертификатов по крону
Принудительный редирект с HTTP на HTTPS в Nginx
Включение gzip и brotli сжатия для ускорения загрузки страниц
Настройка кэширования статики (browser caching) в заголовках Nginx
Защита от простых DDoS и ботов: модуль limit_req в Nginx
Настройка резервного копирования баз данных (mysqldump) по расписанию
Настройка резервного копирования файлов проектов (tar)
Отправка бэкапов на удаленное хранилище (S3-compatible storage или другой сервер)
Ротация и очистка старых логов, чтобы не забить диск
Мониторинг нагрузки: установка и настройка htop и iotop
Просмотр логов в реальном времени: tail, grep и journalctl
Установка простого мониторинга доступности (Uptime Kuma или скрипт в Telegram)
Изоляция арбитражных инструментов: запуск ботов в отдельных контейнерах
Установка SOCKS5/HTTP прокси (3proxy) внутри Docker для мультиаккаунтинга
Настройка аутентификации и ограничения доступа к прокси по IP
Проверка анонимности и работы прокси-сервера
Оптимизация ядра Linux (sysctl.conf) для высоких нагрузок и сетевых соединений
Настройка swap-файла: когда он нужен, а когда вредит
Чек-лист финальной проверки безопасности перед запуском проекта
План действий при взломе или падении сервера: восстановление из бэкапа
АПТЕЧКА ДЛЯ ЖИВОТНЫХ
Автомобили Германии — FORD, MERSEDES, VW, IVECO
Чат рулетка 2026: чаты, где каждый момент — шанс
Чат рулетка онлайн
Чат с Аней: психологический разговор
Чатрулетка: новый способ общения
Чай и кофе: сила вкуса
Детские игрушки из безопасных материалов
Эксплуатация шин: Рекомендации по использованию
Фототехника для пейзажей
Как Aptum хостинг помогает малым бизнесам в управлении CRM-системами
Как выбрать Vdsina вечный хостинг для своего проекта
Компоненты безопасности IP
Конкуренция на российском автомобильном рынке
Онлайн генератор паролей для Windows
Оптимизация обработки форм GEO проекта
Сервер для социальных сетей: Безопасность, Скорость, Изоляция
Смешные моменты
Сравнение Arsys хостинг сервисов для блогеров с WordPress на 2023 год
Весь экран под циферблат