Подключение к VDS по SSH: PuTTY, терминал и SSH-ключи
Пошаговое руководство по SSH-подключению к Linux VDS: PuTTY, терминал, аутентификация по ключу, правило фильтрации Path Panel и советы по безопасности.
Создание и управление запланированными задачами в Linux с помощью crontab: синтаксис cron-выражений, практические примеры, логирование и избежание типичных ошибок.
Cron — это планировщик задач в Linux, который автоматически запускает команды и скрипты в заданное время или с заданными интервалами. Он незаменим для автоматизации повторяющихся задач: резервного копирования, очистки логов, проверки обновлений.
Служба cron установлена и работает по умолчанию на большинстве дистрибутивов Linux. Проверьте её статус командой systemctl status cron или systemctl status crond.
Каждое cron-задание состоит из пяти полей времени и выполняемой команды:
* * * * * /путь/к/команде
│ │ │ │ │
│ │ │ │ └── День недели (0-7, 0 и 7 = воскресенье)
│ │ │ └──── Месяц (1-12)
│ │ └────── День месяца (1-31)
│ └──────── Час (0-23)
└────────── Минута (0-59)
| Символ | Значение | Пример |
|---|---|---|
* | Любое значение | * * * * * = каждую минуту |
, | Несколько значений | 1,15 * * * * = в 1-ю и 15-ю минуту |
- | Диапазон | 1-5 * * * * = минуты с 1 по 5 |
/ | Шаг | */5 * * * * = каждые 5 минут |
# Запускать каждую минуту
* * * * * /usr/bin/script.sh
# Запускать каждый час в начале часа
0 * * * * /usr/bin/script.sh
# Запускать каждый день в 02:30
30 2 * * * /usr/bin/backup.sh
# Запускать каждый понедельник в 08:00
0 8 * * 1 /usr/bin/weekly-report.sh
# Запускать 1-го числа каждого месяца в полночь
0 0 1 * * /usr/bin/monthly-cleanup.sh
# Запускать каждые 5 минут
*/5 * * * * /usr/bin/check-service.sh
# Запускать в будние дни (пн-пт) в 09:00
0 9 * * 1-5 /usr/bin/workday-task.sh
# Запускать каждые 6 часов
0 */6 * * * /usr/bin/sync.sh
@reboot # Один раз при запуске системы
@yearly # Раз в год (0 0 1 1 *)
@monthly # Раз в месяц (0 0 1 * *)
@weekly # Раз в неделю (0 0 * * 0)
@daily # Раз в день (0 0 * * *)
@hourly # Раз в час (0 * * * *)
# Редактировать crontab текущего пользователя
crontab -e
# Редактировать crontab конкретного пользователя (требуется root)
crontab -u имя_пользователя -e
# Просмотреть текущий crontab
crontab -l
# Удалить crontab (используйте с осторожностью!)
crontab -r
Команда crontab -r удаляет все ваши cron-задания без возможности восстановления. Сначала сделайте резервную копию: crontab -l > crontab_backup.txt.
# Запустите crontab -e
crontab -e
# Если предложат выбрать редактор, выберите nano (вариант 1)
# Добавьте задание в конец файла:
30 2 * * * /home/user/backup.sh
# Сохраните и выйдите: Ctrl+X, Y, Enter (для nano)
Для системных cron-заданий используются директории /etc/cron*:
# Структура директорий
/etc/crontab # Основной системный crontab
/etc/cron.d/ # Cron-файлы приложений
/etc/cron.hourly/ # Скрипты, запускаемые ежечасно
/etc/cron.daily/ # Скрипты, запускаемые ежедневно
/etc/cron.weekly/ # Скрипты, запускаемые еженедельно
/etc/cron.monthly/ # Скрипты, запускаемые ежемесячно
# Логи cron на Debian/Ubuntu
sudo tail -f /var/log/syslog | grep CRON
# На RHEL/CentOS
sudo tail -f /var/log/cron
# С помощью journald
sudo journalctl -u cron -f
# Перенаправить stdout и stderr в файл
30 2 * * * /usr/bin/backup.sh >> /var/log/backup.log 2>&1
# Записывать только ошибки
30 2 * * * /usr/bin/backup.sh 2>> /var/log/backup-errors.log
# Подавить весь вывод
30 2 * * * /usr/bin/backup.sh > /dev/null 2>&1
Настройте logrotate для ротации лог-файлов, чтобы они не росли бесконечно.
Cron не наследует переменные окружения пользовательской оболочки. Определяйте PATH и другие переменные явно:
# Добавьте в начало crontab
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
SHELL=/bin/bash
# Или используйте полные пути в командах
30 2 * * * /usr/bin/python3 /home/user/script.py
# Дать права на выполнение
chmod +x /home/user/backup.sh
# Проверить права
ls -la /home/user/backup.sh
# Явно указать рабочую директорию в cron-задании
30 2 * * * cd /var/www/html && php artisan schedule:run
Cron — один из фундаментальных инструментов системного администрирования Linux. С правильным синтаксисом, управлением переменными окружения и логированием вы можете создать надёжную автоматизацию. Регулярно проверяйте задания с помощью crontab -l и следите за лог-файлами для раннего обнаружения проблем.
Наиболее распространённые причины: у скрипта нет прав на выполнение (chmod +x), переменная PATH не определена (cron работает в ограниченной среде), скрипт использует относительные пути вместо абсолютных, или служба cron не запущена. Проверьте /var/log/syslog или /var/log/cron на наличие сообщений об ошибках.
Перенаправьте вывод задания в лог-файл: '30 2 * * * /script.sh >> /var/log/script.log 2>&1'. Затем следите за ним с помощью 'tail -f /var/log/script.log'. Также можно проверить логи cron командой 'sudo grep CRON /var/log/syslog'.
Используйте сокращение @reboot: '@reboot /home/user/startup.sh'. Эта команда будет выполняться при каждом запуске сервера. Создание systemd-сервиса также является более надёжной альтернативой.
Добавьте 'MAILTO=""' в начало файла crontab. Или добавьте '> /dev/null 2>&1' к каждому заданию, чтобы подавить весь вывод.
Пошаговое руководство по SSH-подключению к Linux VDS: PuTTY, терминал, аутентификация по ключу, правило фильтрации Path Panel и советы по безопасности.
Пошаговое руководство по RDP-подключению к Windows Server VDS: настройка, безопасность NLA, правило фильтрации Path Panel и устранение неполадок.
Смена операционной системы VDS через панель REXE: советы по резервному копированию, поддерживаемые дистрибутивы Linux и версии Windows Server.