[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-rabota-v-cli-bash-chto-takoe-cron-i-crontab":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":20,"progress":21,"seo":22},175,"chto-takoe-cron-i-crontab",4,"rabota-v-cli-bash","Работа в CLI (Bash)","💻","Что такое cron и crontab?","**`cron`** — системный демон-планировщик в Unix\u002FLinux, который выполняет команды по расписанию. **`crontab` (cron table)** — таблица расписаний конкретного пользователя, определяющая, какие команды и когда запускать.\n\nАналогия: cron — это будильник операционной системы, который может звонить по сложному расписанию: каждые 5 минут, каждый вторник в 3 часа ночи, первого числа каждого месяца и т. д.\n\n### Управление crontab\n\n```bash\ncrontab -e          # Редактировать расписание текущего пользователя\ncrontab -l          # Показать текущие задачи\ncrontab -r          # Удалить все задачи (осторожно!)\ncrontab -u user -l  # Показать задачи другого пользователя (нужен root)\n```\n\n### Формат записи cron\n\n```\n┌──────────── минуты (0-59)\n│ ┌────────── часы (0-23)\n│ │ ┌──────── день месяца (1-31)\n│ │ │ ┌────── месяц (1-12)\n│ │ │ │ ┌──── день недели (0-7, 0 и 7 = воскресенье)\n│ │ │ │ │\n* * * * * команда\n```\n\n### Специальные символы\n\n| Символ | Значение | Пример |\n|---|---|---|\n| `*` | Любое значение | `* * * * *` — каждую минуту |\n| `,` | Перечисление | `0 8,17 * * *` — в 8:00 и 17:00 |\n| `-` | Диапазон | `0 9 * * 1-5` — будние дни в 9:00 |\n| `\u002F` | Шаг | `*\u002F15 * * * *` — каждые 15 минут |\n\n### Примеры расписаний\n\n```bash\n# Каждую минуту\n* * * * * \u002Fopt\u002Fscripts\u002Fcheck.sh\n\n# Каждые 5 минут\n*\u002F5 * * * * \u002Fopt\u002Fscripts\u002Fmonitor.sh\n\n# Каждый час в 0 минут\n0 * * * * \u002Fopt\u002Fscripts\u002Fhourly.sh\n\n# Ежедневно в 3:00\n0 3 * * * \u002Fopt\u002Fscripts\u002Fbackup.sh\n\n# Каждый будний день в 9:00\n0 9 * * 1-5 \u002Fopt\u002Fscripts\u002Freport.sh\n\n# Каждое воскресенье в 2:00\n0 2 * * 0 \u002Fopt\u002Fscripts\u002Fweekly-cleanup.sh\n\n# Первое число каждого месяца в 6:00\n0 6 1 * * \u002Fopt\u002Fscripts\u002Fmonthly-report.sh\n\n# Каждый рабочий день в 8:30 и 17:30\n30 8,17 * * 1-5 \u002Fopt\u002Fscripts\u002Fnotify.sh\n```\n\n### Специальные строки\n\n```bash\n@reboot    \u002Fopt\u002Fscripts\u002Fstartup.sh     # При загрузке системы\n@hourly    \u002Fopt\u002Fscripts\u002Fhourly.sh      # Каждый час (= 0 * * * *)\n@daily     \u002Fopt\u002Fscripts\u002Fdaily.sh       # Ежедневно (= 0 0 * * *)\n@weekly    \u002Fopt\u002Fscripts\u002Fweekly.sh      # Еженедельно (= 0 0 * * 0)\n@monthly   \u002Fopt\u002Fscripts\u002Fmonthly.sh     # Ежемесячно (= 0 0 1 * *)\n@annually  \u002Fopt\u002Fscripts\u002Fyearly.sh      # Ежегодно (= 0 0 1 1 *)\n```\n\n### Окружение cron\n\nCron выполняет команды с минимальным окружением (не загружает `.bashrc`, `.profile`). Если команде нужны переменные (`PATH`, `JAVA_HOME`), задайте их явно:\n\n```bash\nJAVA_HOME=\u002Fusr\u002Flib\u002Fjvm\u002Fjava-17\nPATH=\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin\n\n0 3 * * * \u002Fopt\u002Fscripts\u002Fbackup.sh >> \u002Fvar\u002Flog\u002Fbackup.log 2>&1\n```\n\n> Всегда перенаправляйте вывод cron-задач в лог (`>> file.log 2>&1`), иначе вывод будет отправлен по электронной почте (если настроен MTA) или потерян.\n\n### Практические примеры для Java-разработчика\n\n```bash\n# Ротация логов каждую ночь\n0 0 * * * find \u002Fvar\u002Flog\u002Fmyapp -name \"*.log\" -mtime +30 -delete\n\n# Бэкап базы данных ежедневно в 2:00\n0 2 * * * pg_dump -U postgres mydb | gzip > \u002Fbackup\u002Fmydb_$(date +\\%Y\\%m\\%d).sql.gz\n\n# Health check каждые 5 минут с автоматическим рестартом\n*\u002F5 * * * * curl -sf http:\u002F\u002Flocalhost:8080\u002Factuator\u002Fhealth > \u002Fdev\u002Fnull || systemctl restart myapp\n\n# Очистка временных файлов старше недели\n0 4 * * * find \u002Ftmp -type f -mtime +7 -delete 2>\u002Fdev\u002Fnull\n```\n\n> **На собеседовании:** нарисуйте формат `* * * * *` (минуты, часы, день, месяц, день недели) и приведите 2-3 примера. Обязательно упомяните проблему окружения (cron не загружает `.bashrc`) и необходимость перенаправления вывода в лог. Вопрос-ловушка: «почему cron-задача работает из терминала, но не из crontab?» — обычно из-за отсутствия PATH или JAVA_HOME.\n\n---","","junior",[15,16,17,18,19],"cron","devops","linux","автоматизация","bash",[],null,{"title":23,"description":24,"ogTitle":23,"ogDescription":25,"keywords":26,"schemaAnswer":33,"featuredSnippetReady":34},"cron и crontab: планирование задач в Linux -- Gymterview","Что такое cron и crontab? Формат записи cron, специальные символы, @reboot\u002F@daily\u002F@weekly, примеры расписаний для бэкапов, health check и ротации логов Java-приложений.","Полный разбор cron и crontab: формат расписания, специальные символы и строки, практические примеры для Java-разработчиков.",[15,27,28,29,30,31,32],"crontab","планировщик задач Linux","формат cron","cron выражение","расписание задач","crontab примеры","cron -- системный демон-планировщик задач в Linux, crontab -- таблица расписаний для пользователя. Формат: минуты (0-59) часы (0-23) день_месяца (1-31) месяц (1-12) день_недели (0-7). Спецсимволы: * (любое), , (перечисление), - (диапазон), \u002F (шаг, например *\u002F5 -- каждые 5 минут). Специальные строки: @reboot, @hourly, @daily, @weekly, @monthly. Управление: crontab -e (редактировать), -l (показать), -r (удалить). Важно: cron запускается с минимальным окружением, поэтому нужно задавать PATH и JAVA_HOME явно, а вывод перенаправлять в лог.",true]