Для чего использовать cron
Cron запускает команды и скрипты по расписанию. Для сервера CS2 он подходит для регулярных задач, которые не требуют постоянного ручного контроля.
Через cron можно выполнять:
- резервное копирование;
- очистку старых архивов;
- ротацию вспомогательных логов;
- проверку свободного места;
- проверку процесса;
- отправку отчётов;
- обновление статистики;
- проверку срока сертификата;
- синхронизацию файлов.
Сам игровой сервер лучше запускать через systemd, а не через cron.
Используйте отдельные скрипты
Не помещайте длинную последовательность команд прямо в crontab. Создайте отдельный Bash- или Python-скрипт, протестируйте его вручную и только затем добавьте в расписание.
Скрипт должен:
- завершаться при ошибке;
- записывать журнал;
- проверять необходимые файлы;
- возвращать понятный код завершения;
- не продолжать работу после критического сбоя.
Полные пути
Среда cron отличается от обычной SSH-сессии. Там может отсутствовать привычный PATH, рабочая папка и переменные окружения.
Используйте абсолютные пути:
- к скрипту;
- к SteamCMD;
- к игровому каталогу;
- к архиватору;
- к журналу;
- к файлу блокировки.
Не рассчитывайте, что cron автоматически перейдёт в нужную папку.
Пользователь
Задача должна выполняться от подходящего пользователя. Backup игровых файлов обычно запускают от пользователя, который имеет к ним доступ.
Не используйте root без необходимости. Если задача создаёт файлы от root в каталоге пользователя steam, следующий запуск игрового сервера может столкнуться с неправильными правами.
Защита от одновременного запуска
Если предыдущий backup ещё не завершён, новый экземпляр не должен запускаться поверх него.
Используйте файловую блокировку или flock. Это особенно важно для:
- архивирования;
- обновления;
- синхронизации;
- создания дампа базы;
- тяжёлой очистки.
Выбор времени
Не запускайте тяжёлые задачи во время максимального онлайна.
Создание архива нагружает CPU и диск. Дамп базы также может влиять на производительность.
Изучите активность сервера и выберите часы минимальной нагрузки.
Журнал cron
Каждая задача должна записывать:
- время запуска;
- результат;
- длительность;
- имя сервера;
- созданный файл;
- текст ошибки.
Не направляйте все задачи в один бесконечно растущий файл. Настройте ротацию.
Уведомления об ошибке
Успешные ежедневные задачи не обязательно отправлять каждый раз. Гораздо важнее уведомление об ошибке.
Сообщение должно содержать:
- название задачи;
- время;
- код ошибки;
- последние строки журнала;
- путь к файлу;
- состояние диска, если проблема связана с backup.
Не обновляйте сервер вслепую
Автоматический запуск SteamCMD без проверки может обновить сервер в неудобное время и нарушить работу плагинов.
Безопаснее автоматизировать проверку доступности новой версии, а установку выполнять контролируемым скриптом с остановкой, резервной копией и проверкой результата.
Проверка расписания
После добавления задачи не ждите следующей ночи. Временно установите ближайшее время, дождитесь запуска и проверьте журнал.
Затем верните постоянное расписание.
Часовой пояс
Убедитесь, что системное время и часовой пояс соответствуют ожиданиям. Иначе техническая задача может запуститься во время вечернего онлайна.
Итог
Cron полезен для регулярного обслуживания, но каждый процесс должен быть предварительно протестирован вручную.
Используйте отдельные скрипты, абсолютные пути, блокировку повторного запуска и уведомления об ошибках.