Загрузка...
Загрузка...
Готовые cron-задачи для бэкапов, очистки кэша, рассылок, синхронизации. WordPress, Laravel, Node.js. Копируй и адаптируй под свой проект.
Полное руководство по cron. Синтаксис полей, специальные значения, переменные окружения. Настройка, отладка и типичные ошибки планировщика задач.
DevOpsГотовые конфигурации Docker Compose для WordPress, Node.js, PHP. Локальная разработка, базы данных, кэш. Копируй и адаптируй под свой проект.
УтилитыРуководство по созданию скриншотов веб-страниц. Онлайн-сервисы, API, headless-браузеры. Полноэкранные и видимые области, мобильные viewport.
DevOpsEscape и Unescape: что такое экранирование, зачем нужно (XSS, целостность данных). HTML entities, JSON, JS, URL, Base64. Примеры кода и типичные ошибки.
Поделитесь с коллегами или изучите другие материалы блога
Cron — основа автоматизации на сервере. В этой статье собраны 15 готовых заданий для типичных задач веб-разработки: бэкапы, очистка кэша, отправка отчётов, синхронизация. Каждое задание можно скопировать и адаптировать. Для генерации и проверки расписаний используйте Cron Generator на reChecker. Базовый синтаксис cron описан в руководстве по cron-задачам.
Ежедневный дамп базы в 3:00 с ротацией старых копий:
0 3 * * * /usr/bin/mysqldump -u backup -p'password' --single-transaction --routines --triggers mydb | gzip > /backups/mydb_$(date +\%Y\%m\%d).sql.gz
Ротация — удаление дампов старше 7 дней:
0 4 * * * find /backups -name "mydb_*.sql.gz" -mtime +7 -delete
В crontab символ % экранируется: \%.
0 3 * * * /usr/bin/pg_dump -U postgres mydb | gzip > /backups/mydb_$(date +\%Y\%m\%d).sql.gz
С настройкой через .pgpass (файл с правами 600):
0 3 * * * /usr/bin/pg_dump -U postgres -h localhost mydb | gzip > /backups/mydb_$(date +\%Y\%m\%d).sql.gz
Архивация директории с исключениями:
0 2 * * 0 tar -czf /backups/site_$(date +\%Y\%m\%d).tar.gz -C /var/www --exclude='*/cache/*' --exclude='*/logs/*' example.com
Еженедельно в воскресенье в 2:00. Исключены кэш и логи.
Ротация и удаление старых логов приложений:
0 0 * * * find /var/www/example.com/storage/logs -name "*.log" -mtime +30 -delete
Удаление старых логов Nginx/Apache (если не используется logrotate):
0 1 1 * * find /var/log/nginx -name "*.gz" -mtime +90 -delete
0 4 * * * find /tmp -type f -atime +7 -delete
0 4 * * * find /var/www/*/storage/framework/cache -type f -mtime +1 -delete
Первая строка — общие временные файлы старше 7 дней. Вторая — кэш Laravel (адаптируйте путь).
Плагин WP-CLI для обновлений и оптимизации БД:
0 4 * * 0 cd /var/www/wordpress && wp core update --quiet && wp plugin update --all --quiet && wp db optimize --quiet
Еженедельно в воскресенье в 4:00. Добавьте --path=/path/to/wordpress при необходимости.
0 3 * * * cd /var/www/wordpress && wp db export - | gzip > /backups/wp_$(date +\%Y\%m\%d).sql.gz
Laravel использует одну cron-запись для всего расписания:
* * * * * cd /var/www/laravel && php artisan schedule:run >> /dev/null 2>&1
Задачи задаются в app/Console/Kernel.php:
protected function schedule(Schedule $schedule)
{
$schedule->command('backup:run')->daily()->at('03:00');
$schedule->command('queue:prune-failed')->daily();
$schedule->command('cache:prune-stale-tags')->hourly();
}
Старые сессии в /var/lib/php/sessions:
0 5 * * * find /var/lib/php/sessions -type f -mmin +1440 -delete
Удаляются сессии старше 24 часов (1440 минут). Настройте под session.gc_maxlifetime в php.ini.
Уведомление за 14 дней до истечения (с помощью certbot или openssl):
0 9 * * * /opt/scripts/check-ssl.sh
Пример скрипта:
#!/bin/bash
DOMAIN="example.com"
EXPIRY=$(echo | openssl s_client -servername $DOMAIN -connect $DOMAIN:443 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
EXPIRY_EPOCH=$(date -d "$EXPIRY" +%s)
NOW_EPOCH=$(date +%s)
DAYS_LEFT=$(( (EXPIRY_EPOCH - NOW_EPOCH) / 86400 ))
if [ $DAYS_LEFT -lt 14 ]; then
echo "SSL истекает через $DAYS_LEFT дней" | mail -s "SSL Alert" admin@example.com
fi
Выгрузка бэкапов в S3 или другой объектный сторедж:
0 5 * * * /usr/bin/aws s3 sync /backups s3://my-bucket/backups/ --delete
С шифрованием и ограничением по времени (rclone):
0 5 * * * rclone sync /backups remote:backups --max-age 7d
Удаление неиспользуемых образов и контейнеров:
0 6 * * 0 docker system prune -af --volumes
Еженедельно. Убедитесь, что важные volumes не будут удалены. Более мягкий вариант без --volumes:
0 6 * * 0 docker image prune -af && docker container prune -f
Проверка доступности и отправка отчёта:
0 9 * * 1-5 /opt/scripts/uptime-report.sh
Скрипт может использовать curl для проверки HTTP и отправлять результат по почте или в мессенджер.
Если почта отправляется через локальный MTA:
0 2 * * * find /var/spool/mail -type f -mtime +7 -delete
Для Postfix — сброс зависших писем (осторожно):
0 3 * * * postsuper -d ALL deferred
Используйте только при понимании последствий.
Для статических сайтов или кастомных CMS:
0 6 * * * /usr/bin/php /var/www/example.com/generate-sitemap.php
Или через curl к внутреннему endpoint:
0 6 * * * curl -s -o /dev/null https://example.com/cron/generate-sitemap?key=SECRET
Эндпоинт должен быть защищён секретным ключом и недоступен извне.
| Практика | Описание |
|---|---|
| Lockfile | Используйте flock или lock-файлы для длительных задач |
| Логирование | Пишите логи в файлы с ротацией |
| Уведомления | Настройте алерты при ошибках (exit code != 0) |
| Тестирование | Запускайте скрипты вручную перед добавлением в cron |
| Документация | Комментируйте задания в crontab |
Пример с lockfile и логированием:
0 3 * * * flock -n /tmp/backup.lock /opt/backup.sh >> /var/log/backup.log 2>&1 || echo "Backup already running" | mail -s "Cron alert" admin@example.com
Базовый синтаксис и отладка cron описаны в руководстве по cron-задачам. Проверить и сгенерировать расписание можно в Cron Generator на reChecker.
0 4 * * * find /var/www/*/storage/framework/sessions -type f -mmin +10080 -delete
Удаление сессий старше 7 дней (10080 минут). Адаптируйте путь под структуру проекта.
0 2 * * * cd /var/www/example.com && git pull origin main 2>&1 | logger -t git-sync
Ежедневное обновление кода. Логи пишутся в syslog с тегом git-sync.
*/5 * * * * curl -sf -o /dev/null https://example.com/health || echo "Site down" | mail -s "Uptime alert" admin@example.com
Каждые 5 минут. При недоступности — отправка письма. Для продакшена предпочтительнее специализированные сервисы мониторинга.
0 6 * * 0 docker image prune -af && docker container prune -f
Еженедельное удаление неиспользуемых образов и контейнеров. Без -f потребуется подтверждение.
При работе с cron и веб-приложениями:
15 готовых заданий покрывают основные сценарии: бэкапы, очистка, обновления, мониторинг. Адаптируйте пути и параметры под свою инфраструктуру. Тестируйте скрипты вручную перед добавлением в cron.