[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"page-ru-/guides/linux/cron-basics":3,"mdc--j7dd3e-key":881,"mdc--6xjgh5-key":921,"mdc--mwblbx-key":943,"mdc--yccyd8-key":960,"mdc-ftjhts-key":984,"mdc--1tudyk-key":1029,"mdc-bb4380-key":1045,"mdc-54q7qi-key":1070,"mdc-ayeme0-key":1087,"mdc--fn88f1-key":1102,"related-/guides/linux/cron-errors,/guides/linux/crontab-command,/guides/linux/systemd-timers":1124},{"id":4,"title":5,"appliesTo":6,"author":12,"body":13,"canonical":810,"code":810,"createdAt":811,"description":812,"difficulty":813,"draft":814,"estimatedTime":815,"extension":816,"faq":817,"howToSteps":830,"howToTotalTime":849,"image":810,"keywords":850,"locale":861,"meta":862,"navigation":863,"path":864,"platform":865,"related":866,"section":870,"seo":871,"severity":810,"stem":872,"summary":873,"tags":874,"twitterCreator":810,"twitterSite":810,"type":879,"updatedAt":811,"__hash__":880},"content_ru/guides/linux/cron-basics.md","Cron в Linux: полное руководство по автоматизации задач",[7,8,9,10,11],"Ubuntu 20.04+","Debian 10+","CentOS 7+","Fedora 35+","Arch Linux","FixPedia Team",{"type":14,"value":15,"toc":795},"minimark",[16,21,25,29,32,108,112,117,120,128,167,170,214,217,237,241,244,273,283,287,290,319,324,327,331,334,357,360,401,405,408,587,591,594,663,668,672,675,699,703,791],[17,18,20],"h2",{"id":19},"введение","Введение",[22,23,24],"p",{},"Cron — это классический планировщик задач в Unix-подобных системах, который позволяет автоматически запускать команды и скрипты по расписанию. С его помощью можно настроить регулярные операции: создание резервных копий, очистка временных файлов, отправку отчётов и многое другое. В этом руководстве вы освоите основы cron: синтаксис, создание заданий, отладку и типичные сценарии использования. После выполнения вы сможете самостоятельно настраивать автоматизацию в Linux.",[17,26,28],{"id":27},"требования","Требования",[22,30,31],{},"Перед началом убедитесь, что:",[33,34,35,39,51,54],"ul",{},[36,37,38],"li",{},"У вас есть доступ к терминалу Linux (локально или через SSH).",[36,40,41,42,46,47,50],{},"Установлен демон cron (обычно предустановлен в большинстве дистрибутивов). В Debian/Ubuntu это пакет ",[43,44,45],"code",{},"cron",", в CentOS/Fedora — ",[43,48,49],{},"cronie",".",[36,52,53],{},"У вас есть права на выполнение задач (cron работает в контексте текущего пользователя).",[36,55,56,57,60,61,104,105,50],{},"Для тестирования подготовьте простой скрипт, например ",[43,58,59],{},"~/test.sh"," с содержимым:\n",[62,63,68],"pre",{"className":64,"code":65,"language":66,"meta":67,"style":67},"language-bash shiki shiki-themes github-light github-dark","#!/bin/bash\necho \"Cron работает: $(date)\" >> /tmp/cron_test.log\n","bash","",[43,69,70,79],{"__ignoreMap":67},[71,72,75],"span",{"class":73,"line":74},"line",1,[71,76,78],{"class":77},"sJ8bj","#!/bin/bash\n",[71,80,82,86,90,94,97,101],{"class":73,"line":81},2,[71,83,85],{"class":84},"sj4cs","echo",[71,87,89],{"class":88},"sZZnC"," \"Cron работает: $(",[71,91,93],{"class":92},"sScJk","date",[71,95,96],{"class":88},")\"",[71,98,100],{"class":99},"szBVR"," >>",[71,102,103],{"class":88}," /tmp/cron_test.log\n","\nНе забудьте сделать его исполняемым: ",[43,106,107],{},"chmod +x ~/test.sh",[17,109,111],{"id":110},"пошаговая-инструкция","Пошаговая инструкция",[113,114,116],"h3",{"id":115},"шаг-1-понимание-формата-crontab","Шаг 1: Понимание формата crontab",[22,118,119],{},"Файл crontab (таблица заданий cron) состоит из строк, каждая из которых определяет расписание и команду. Формат:",[62,121,126],{"className":122,"code":124,"language":125},[123],"language-text","минуты часы день_месяца месяц день_недели команда\n","text",[43,127,124],{"__ignoreMap":67},[33,129,130,137,143,149,155,161],{},[36,131,132,136],{},[133,134,135],"strong",{},"Минуты",": 0–59.",[36,138,139,142],{},[133,140,141],{},"Часы",": 0–23.",[36,144,145,148],{},[133,146,147],{},"День месяца",": 1–31.",[36,150,151,154],{},[133,152,153],{},"Месяц",": 1–12.",[36,156,157,160],{},[133,158,159],{},"День недели",": 0–7 (0 и 7 — воскресенье).",[36,162,163,166],{},[133,164,165],{},"Команда",": путь к скрипту или команда с аргументами.",[22,168,169],{},"Специальные символы:",[33,171,172,178,188,198,208],{},[36,173,174,177],{},[43,175,176],{},"*"," — любое значение.",[36,179,180,183,184,187],{},[43,181,182],{},"*/N"," — шаг (например, ",[43,185,186],{},"*/15"," в минутах — каждые 15 минут).",[36,189,190,193,194,197],{},[43,191,192],{},","," — перечисление (например, ",[43,195,196],{},"0,30"," — в 0 и 30 минут).",[36,199,200,203,204,207],{},[43,201,202],{},"-"," — диапазон (например, ",[43,205,206],{},"1-5"," — с понедельника по пятницу).",[36,209,210,213],{},[43,211,212],{},"@reboot"," — выполнить при загрузке системы.",[22,215,216],{},"Примеры:",[33,218,219,225,231],{},[36,220,221,224],{},[43,222,223],{},"0 * * * * /path/to/script.sh"," — каждый час в 0 минут.",[36,226,227,230],{},[43,228,229],{},"30 3 * * 1-5 /backup.sh"," — в 3:30 с понедельника по пятницу.",[36,232,233,236],{},[43,234,235],{},"0 0 1 * * /cleanup.sh"," — в 00:00 1-го числа каждого месяца.",[113,238,240],{"id":239},"шаг-2-редактирование-crontab","Шаг 2: Редактирование crontab",[22,242,243],{},"Каждый пользователь имеет свой crontab. Чтобы отредактировать его:",[245,246,247,263,270],"ol",{},[36,248,249,250],{},"В терминале выполните:\n",[62,251,253],{"className":64,"code":252,"language":66,"meta":67,"style":67},"crontab -e\n",[43,254,255],{"__ignoreMap":67},[71,256,257,260],{"class":73,"line":74},[71,258,259],{"class":92},"crontab",[71,261,262],{"class":84}," -e\n",[36,264,265,266,269],{},"При первом запуске система может спросить, какой редактор использовать (nano или vim). Рекомендуем выбрать ",[43,267,268],{},"nano"," для простоты.",[36,271,272],{},"Откроется текстовый файл (возможно пустой). Это и есть ваш crontab.",[274,275,276],"blockquote",{},[22,277,278,279,282],{},"💡 Совет: Если вы хотите редактировать crontab другого пользователя (например, root), используйте ",[43,280,281],{},"sudo crontab -e",". Но будьте осторожны — задания от root выполняются с привилегиями суперпользователя.",[113,284,286],{"id":285},"шаг-3-добавление-задания","Шаг 3: Добавление задания",[22,288,289],{},"В открытом редакторе:",[245,291,292,295,308],{},[36,293,294],{},"Перейдите в конец файла.",[36,296,297,298,301,302],{},"Добавьте строку с заданием. Например, чтобы запускать скрипт ",[43,299,300],{},"~/backup.sh"," каждый день в 2:30 ночи:\n",[62,303,306],{"className":304,"code":305,"language":125},[123],"30 2 * * * /home/ваш_пользователь/backup.sh\n",[43,307,305],{"__ignoreMap":67},[36,309,310,311,314,315,318],{},"Убедитесь, что путь к скрипту абсолютный (начинается с ",[43,312,313],{},"/","). Cron не использует переменную ",[43,316,317],{},"PATH"," из вашего shell, поэтому указывайте полные пути ко всем исполняемым файлам внутри скрипта.",[274,320,321],{},[22,322,323],{},"⚠️ Важно: Не добавляйте лишние символы (пробелы, табуляции) в начале строки. Cron терпимо относится к пробелам после полей, но лучше писать без них.",[325,326],"in-article-ad",{},[113,328,330],{"id":329},"шаг-4-проверка-и-управление-заданиями","Шаг 4: Проверка и управление заданиями",[22,332,333],{},"После сохранения файла cron автоматически загружает новую конфигурацию. Чтобы убедиться, что задание добавлено:",[33,335,336,343,350],{},[36,337,338,339,342],{},"Выполните ",[43,340,341],{},"crontab -l"," — вы увидите список всех заданий текущего пользователя.",[36,344,345,346,349],{},"Чтобы удалить задание, снова откройте crontab (",[43,347,348],{},"crontab -e",") и удалите соответствующую строку.",[36,351,352,353,356],{},"Чтобы полностью очистить crontab текущего пользователя: ",[43,354,355],{},"crontab -r"," (будьте осторожны, это необратимо!).",[22,358,359],{},"Для управления заданиями других пользователей (только root) используйте:",[62,361,363],{"className":64,"code":362,"language":66,"meta":67,"style":67},"sudo crontab -l -u username   # посмотреть задания пользователя\nsudo crontab -e -u username   # редактировать задания пользователя\n",[43,364,365,385],{"__ignoreMap":67},[71,366,367,370,373,376,379,382],{"class":73,"line":74},[71,368,369],{"class":92},"sudo",[71,371,372],{"class":88}," crontab",[71,374,375],{"class":84}," -l",[71,377,378],{"class":84}," -u",[71,380,381],{"class":88}," username",[71,383,384],{"class":77},"   # посмотреть задания пользователя\n",[71,386,387,389,391,394,396,398],{"class":73,"line":81},[71,388,369],{"class":92},[71,390,372],{"class":88},[71,392,393],{"class":84}," -e",[71,395,378],{"class":84},[71,397,381],{"class":88},[71,399,400],{"class":77},"   # редактировать задания пользователя\n",[113,402,404],{"id":403},"шаг-5-отладка-и-логи","Шаг 5: Отладка и логи",[22,406,407],{},"Если задание не выполняется, ищите причину в логах:",[245,409,410,451,523,538,560],{},[36,411,412,415,416,447,450],{},[133,413,414],{},"Проверьте статус службы cron",":",[62,417,419],{"className":64,"code":418,"language":66,"meta":67,"style":67},"systemctl status cron      # Debian/Ubuntu\nsystemctl status crond     # CentOS/Fedora\n",[43,420,421,435],{"__ignoreMap":67},[71,422,423,426,429,432],{"class":73,"line":74},[71,424,425],{"class":92},"systemctl",[71,427,428],{"class":88}," status",[71,430,431],{"class":88}," cron",[71,433,434],{"class":77},"      # Debian/Ubuntu\n",[71,436,437,439,441,444],{"class":73,"line":81},[71,438,425],{"class":92},[71,440,428],{"class":88},[71,442,443],{"class":88}," crond",[71,445,446],{"class":77},"     # CentOS/Fedora\n",[448,449],"br",{},"Служба должна быть активной (active (running)).",[36,452,453,456,457,487,489,490],{},[133,454,455],{},"Просмотрите логи cron",". Обычно они пишутся в системный лог:",[62,458,460],{"className":64,"code":459,"language":66,"meta":67,"style":67},"grep CRON /var/log/syslog      # Debian/Ubuntu\ngrep CRON /var/log/cron        # CentOS/Fedora\n",[43,461,462,475],{"__ignoreMap":67},[71,463,464,467,470,473],{"class":73,"line":74},[71,465,466],{"class":92},"grep",[71,468,469],{"class":88}," CRON",[71,471,472],{"class":88}," /var/log/syslog",[71,474,434],{"class":77},[71,476,477,479,481,484],{"class":73,"line":81},[71,478,466],{"class":92},[71,480,469],{"class":88},[71,482,483],{"class":88}," /var/log/cron",[71,485,486],{"class":77},"        # CentOS/Fedora\n",[448,488],{},"Или через journalctl:",[62,491,493],{"className":64,"code":492,"language":66,"meta":67,"style":67},"journalctl -u cron -f          # следить за логами в реальном времени\njournalctl -u crond -f         # для CentOS/Fedora\n",[43,494,495,510],{"__ignoreMap":67},[71,496,497,500,502,504,507],{"class":73,"line":74},[71,498,499],{"class":92},"journalctl",[71,501,378],{"class":84},[71,503,431],{"class":88},[71,505,506],{"class":84}," -f",[71,508,509],{"class":77},"          # следить за логами в реальном времени\n",[71,511,512,514,516,518,520],{"class":73,"line":81},[71,513,499],{"class":92},[71,515,378],{"class":84},[71,517,443],{"class":88},[71,519,506],{"class":84},[71,521,522],{"class":77},"         # для CentOS/Fedora\n",[36,524,525,528,529,535,537],{},[133,526,527],{},"Проверьте вывод команды",". По умолчанию cron отправляет любой вывод (stdout и stderr) на email пользователю (локальному). Чтобы перехватить его, добавьте перенаправление в файл:",[62,530,533],{"className":531,"code":532,"language":125},[123],"* * * * * /path/to/script.sh >> /tmp/script.log 2>&1\n",[43,534,532],{"__ignoreMap":67},[448,536],{},"Так вы сохраните и стандартный вывод, и ошибки.",[36,539,540,543,544],{},[133,541,542],{},"Убедитесь в правах на скрипт",". Скрипт должен быть исполняемым:",[62,545,547],{"className":64,"code":546,"language":66,"meta":67,"style":67},"chmod +x /path/to/script.sh\n",[43,548,549],{"__ignoreMap":67},[71,550,551,554,557],{"class":73,"line":74},[71,552,553],{"class":92},"chmod",[71,555,556],{"class":88}," +x",[71,558,559],{"class":88}," /path/to/script.sh\n",[36,561,562,565,566,569,570,573,574,577,578,580,581],{},[133,563,564],{},"Проверьте окружение",". Cron имеет минимальное окружение (обычно только ",[43,567,568],{},"PATH=/usr/bin:/bin","). Если ваш скрипт использует команды из других каталогов (например, ",[43,571,572],{},"python3"," из ",[43,575,576],{},"/usr/local/bin","), либо укажите полный путь, либо задайте ",[43,579,317],{}," в самом crontab:",[62,582,585],{"className":583,"code":584,"language":125},[123],"PATH=/usr/local/bin:/usr/bin:/bin\n* * * * * /path/to/script.sh\n",[43,586,584],{"__ignoreMap":67},[113,588,590],{"id":589},"шаг-6-полезные-примеры","Шаг 6: Полезные примеры",[22,592,593],{},"Вот несколько распространённых сценариев:",[33,595,596,607,618,629,640,652],{},[36,597,598,415,601],{},[133,599,600],{},"Запуск каждые 5 минут",[62,602,605],{"className":603,"code":604,"language":125},[123],"*/5 * * * * /usr/bin/wget -q https://example.com/heartbeat\n",[43,606,604],{"__ignoreMap":67},[36,608,609,415,612],{},[133,610,611],{},"Ежедневный запуск в 1:00",[62,613,616],{"className":614,"code":615,"language":125},[123],"0 1 * * * /home/user/daily_backup.sh\n",[43,617,615],{"__ignoreMap":67},[36,619,620,415,623],{},[133,621,622],{},"Выполнение в 9:00 и 17:00 будних дней",[62,624,627],{"className":625,"code":626,"language":125},[123],"0 9,17 * * 1-5 /home/user/work_start.sh\n",[43,628,626],{"__ignoreMap":67},[36,630,631,415,634],{},[133,632,633],{},"Запуск в первый день месяца в 2:30",[62,635,638],{"className":636,"code":637,"language":125},[123],"30 2 1 * * /home/user/monthly_report.sh\n",[43,639,637],{"__ignoreMap":67},[36,641,642,645,646],{},[133,643,644],{},"Выполнение при загрузке системы"," (например, для запуска фонового процесса):",[62,647,650],{"className":648,"code":649,"language":125},[123],"@reboot /usr/local/bin/my_daemon --config /etc/my_daemon.conf\n",[43,651,649],{"__ignoreMap":67},[36,653,654,415,657],{},[133,655,656],{},"Запуск каждую минуту (для тестирования)",[62,658,661],{"className":659,"code":660,"language":125},[123],"* * * * * /home/user/test_cron.sh\n",[43,662,660],{"__ignoreMap":67},[274,664,665],{},[22,666,667],{},"💡 Совет: Для сложных расписаний используйте онлайн-генераторы crontab (например, crontab.guru) — они наглядно показывают, когда будет выполняться задание.",[17,669,671],{"id":670},"проверка-результата","Проверка результата",[22,673,674],{},"После добавления задания:",[245,676,677,682,689,696],{},[36,678,679,680,50],{},"Убедитесь, что оно появилось в списке: ",[43,681,341],{},[36,683,684,685,688],{},"Если задание должно было уже сработать, проверьте логи (см. Шаг 5) или файл, который должен был создаться (например, ",[43,686,687],{},"/tmp/cron_test.log",").",[36,690,691,692,695],{},"Для быстрой проверки добавьте задание, которое срабатывает каждую минуту (",[43,693,694],{},"* * * * * ...","), и наблюдайте за результатом в течение нескольких минут.",[36,697,698],{},"Проверьте, что скрипт выполняется корректно при ручном запуске (вне cron) — так вы исключите ошибки в самом скрипте.",[17,700,702],{"id":701},"возможные-проблемы","Возможные проблемы",[33,704,705,716,728,746,764,775],{},[36,706,707,710,712,713,688],{},[133,708,709],{},"\"Cron не запускает мой скрипт, хотя вручную он работает\"",[448,711],{},"\nПричина: отсутствие абсолютных путей в скрипте или недостаточные права. Решение: используйте полные пути ко всем командам внутри скрипта и убедитесь, что скрипт исполняем (",[43,714,715],{},"chmod +x",[36,717,718,721,723,724,727],{},[133,719,720],{},"\"В логах cron нет записей о моём задании\"",[448,722],{},"\nПричина: возможно, демон cron не запущен или задание добавлено в crontab другого пользователя. Решение: проверьте статус службы (",[43,725,726],{},"systemctl status cron",") и убедитесь, что редактировали crontab нужного пользователя.",[36,729,730,733,735,736,738,739,738,742,745],{},[133,731,732],{},"\"Задание выполняется, но с ошибками\"",[448,734],{},"\nПричина: окружение cron сильно отличается от вашего интерактивного shell (нет переменных ",[43,737,317],{},", ",[43,740,741],{},"HOME",[43,743,744],{},"USER"," и т.д.). Решение: явно задавайте нужные переменные в crontab или внутри скрипта, используйте абсолютные пути.",[36,747,748,754,756,757,759,760,763],{},[133,749,750,751,753],{},"\"Cron игнорирует строку с ",[43,752,212],{},"\"",[448,755],{},"\nПричина: в некоторых дистрибутивах (например, CentOS) для ",[43,758,212],{}," требуется отдельная настройка (в ",[43,761,762],{},"/etc/crontab"," или через systemd). Решение: используйте стандартный формат в пользовательском crontab, либо создайте systemd-таймер для задач при загрузке.",[36,765,766,769,771,772,774],{},[133,767,768],{},"\"Задание выполняется дважды\"",[448,770],{},"\nПричина: возможно, задание добавлено и в пользовательский crontab, и в системный (",[43,773,762],{},"). Решение: проверьте оба места и оставьте только одну запись.",[36,776,777,780,782,783,786,787,790],{},[133,778,779],{},"\"Cron не может найти интерпретатор скрипта (например, bash)\"",[448,781],{},"\nПричина: в первой строке скрипта указан неверный путь к интерпретатору. Решение: используйте ",[43,784,785],{},"#!/bin/bash"," (или ",[43,788,789],{},"#!/usr/bin/env bash"," для переносимости) и убедитесь, что файл интерпретатора существует.",[792,793,794],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":67,"searchDepth":81,"depth":81,"links":796},[797,798,799,808,809],{"id":19,"depth":81,"text":20},{"id":27,"depth":81,"text":28},{"id":110,"depth":81,"text":111,"children":800},[801,803,804,805,806,807],{"id":115,"depth":802,"text":116},3,{"id":239,"depth":802,"text":240},{"id":285,"depth":802,"text":286},{"id":329,"depth":802,"text":330},{"id":403,"depth":802,"text":404},{"id":589,"depth":802,"text":590},{"id":670,"depth":81,"text":671},{"id":701,"depth":81,"text":702},null,"2026-02-16 20:17:12","Изучите основы cron и автоматизируйте рутинные операции в Linux. Пошаговая инструкция с примерами, отладкой и советами. Начните использовать cron за 10 минут!","easy",false,"10-15 мин","md",[818,821,824,827],{"answer":819,"question":820},"Выполните `systemctl status cron` (в Debian/Ubuntu) или `systemctl status crond` (в CentOS/Fedora). Для просмотра логов используйте `journalctl -u cron` или `grep CRON /var/log/syslog`.","Как проверить, работает ли служба cron?",{"answer":822,"question":823},"Cron имеет ограниченное окружение. Убедитесь, что в скрипте используются абсолютные пути, и что скрипт имеет права на выполнение (`chmod +x`). Также проверьте, что в первой строке скрипта указан правильный интерпретатор (например, `#!/bin/bash`).","Почему мой cron-задание не выполняется, хотя вручную скрипт работает?",{"answer":825,"question":826},"В строке времени укажите `*/30 * * * *`. Это сработает в 0 и 30 минут каждого часа.","Как настроить cron на выполнение задания каждые 30 минут?",{"answer":828,"question":829},"Да, можно задать переменные в самом crontab, например: `PATH=/usr/local/bin:/usr/bin`. Или внутри команды: `VAR=value command`.","Можно ли использовать переменные окружения в crontab?",[831,834,837,840,843,846],{"name":832,"text":833},"Изучите синтаксис строки времени cron","Cron использует пять полей: минуты (0-59), часы (0-23), день месяца (1-31), месяц (1-12), день недели (0-7, где 0 и 7 — воскресенье). Специальные символы: `*` (любое значение), `,` (список), `-` (диапазон), `/` (шаг). Например, `*/5 * * * *` — каждые 5 минут.",{"name":835,"text":836},"Откройте crontab для редактирования","В терминале выполните `crontab -e`. При первом запуске система предложит выбрать редактор (nano или vim). Выберите удобный.",{"name":838,"text":839},"Добавьте новое задание","В открывшемся файле добавьте строку в формате: `минуты часы день_месяца месяц день_недели команда`. Например: `0 3 * * * /home/user/backup.sh` — запуск скрипта каждый день в 3:00.",{"name":841,"text":842},"Сохраните изменения и выйдите","В nano: Ctrl+X, затем Y и Enter. В vim: нажмите Esc, затем `:wq` и Enter. Cron автоматически загрузит новую конфигурацию.",{"name":844,"text":845},"Проверьте список текущих заданий","Выполните `crontab -l` чтобы увидеть все задания текущего пользователя.",{"name":847,"text":848},"Удалите или отредактируйте задание","Чтобы удалить задание, снова выполните `crontab -e` и удалите соответствующую строку. Для полной очистки всех заданий: `crontab -r`.","PT15M",[851,852,853,854,855,856,857,858,859,860],"cron linux","crontab пример","как настроить cron","планировщик заданий linux","cron каждые 5 минут","cron ошибка","cron не работает","cron запуск скрипта","cron время","crontab команда","ru_RU",{},true,"/guides/linux/cron-basics","linux",[867,868,869],"/guides/linux/cron-errors","/guides/linux/crontab-command","/guides/linux/systemd-timers","Гайды Linux",{"title":5,"description":812},"guides/linux/cron-basics","Это руководство познакомит вас с cron — стандартным планировщиком задач в Linux. Вы научитесь создавать, управлять и отлаживать cron-задания для автоматизации регулярных операций.",[45,259,865,875,876,877,878],"задания","планировщик","sysadmin","автоматизация","guide","RAoxnz71OKCsjmD8fAm4lRNxqxuqbdawsnOsu8rs11M",{"data":882,"body":883},{},{"type":884,"children":885},"root",[886],{"type":887,"tag":22,"props":888,"children":889},"element",{},[890,891,896,898,904,906,912,914,920],{"type":125,"value":338},{"type":887,"tag":43,"props":892,"children":894},{"className":893},[],[895],{"type":125,"value":726},{"type":125,"value":897}," (в Debian/Ubuntu) или ",{"type":887,"tag":43,"props":899,"children":901},{"className":900},[],[902],{"type":125,"value":903},"systemctl status crond",{"type":125,"value":905}," (в CentOS/Fedora). Для просмотра логов используйте ",{"type":887,"tag":43,"props":907,"children":909},{"className":908},[],[910],{"type":125,"value":911},"journalctl -u cron",{"type":125,"value":913}," или ",{"type":887,"tag":43,"props":915,"children":917},{"className":916},[],[918],{"type":125,"value":919},"grep CRON /var/log/syslog",{"type":125,"value":50},{"data":922,"body":923},{},{"type":884,"children":924},[925],{"type":887,"tag":22,"props":926,"children":927},{},[928,930,935,937,942],{"type":125,"value":929},"Cron имеет ограниченное окружение. Убедитесь, что в скрипте используются абсолютные пути, и что скрипт имеет права на выполнение (",{"type":887,"tag":43,"props":931,"children":933},{"className":932},[],[934],{"type":125,"value":715},{"type":125,"value":936},"). Также проверьте, что в первой строке скрипта указан правильный интерпретатор (например, ",{"type":887,"tag":43,"props":938,"children":940},{"className":939},[],[941],{"type":125,"value":785},{"type":125,"value":688},{"data":944,"body":945},{},{"type":884,"children":946},[947],{"type":887,"tag":22,"props":948,"children":949},{},[950,952,958],{"type":125,"value":951},"В строке времени укажите ",{"type":887,"tag":43,"props":953,"children":955},{"className":954},[],[956],{"type":125,"value":957},"*/30 * * * *",{"type":125,"value":959},". Это сработает в 0 и 30 минут каждого часа.",{"data":961,"body":962},{},{"type":884,"children":963},[964],{"type":887,"tag":22,"props":965,"children":966},{},[967,969,975,977,983],{"type":125,"value":968},"Да, можно задать переменные в самом crontab, например: ",{"type":887,"tag":43,"props":970,"children":972},{"className":971},[],[973],{"type":125,"value":974},"PATH=/usr/local/bin:/usr/bin",{"type":125,"value":976},". Или внутри команды: ",{"type":887,"tag":43,"props":978,"children":980},{"className":979},[],[981],{"type":125,"value":982},"VAR=value command",{"type":125,"value":50},{"data":985,"body":986},{},{"type":884,"children":987},[988],{"type":887,"tag":22,"props":989,"children":990},{},[991,993,998,1000,1005,1007,1012,1014,1019,1021,1027],{"type":125,"value":992},"Cron использует пять полей: минуты (0-59), часы (0-23), день месяца (1-31), месяц (1-12), день недели (0-7, где 0 и 7 — воскресенье). Специальные символы: ",{"type":887,"tag":43,"props":994,"children":996},{"className":995},[],[997],{"type":125,"value":176},{"type":125,"value":999}," (любое значение), ",{"type":887,"tag":43,"props":1001,"children":1003},{"className":1002},[],[1004],{"type":125,"value":192},{"type":125,"value":1006}," (список), ",{"type":887,"tag":43,"props":1008,"children":1010},{"className":1009},[],[1011],{"type":125,"value":202},{"type":125,"value":1013}," (диапазон), ",{"type":887,"tag":43,"props":1015,"children":1017},{"className":1016},[],[1018],{"type":125,"value":313},{"type":125,"value":1020}," (шаг). Например, ",{"type":887,"tag":43,"props":1022,"children":1024},{"className":1023},[],[1025],{"type":125,"value":1026},"*/5 * * * *",{"type":125,"value":1028}," — каждые 5 минут.",{"data":1030,"body":1031},{},{"type":884,"children":1032},[1033],{"type":887,"tag":22,"props":1034,"children":1035},{},[1036,1038,1043],{"type":125,"value":1037},"В терминале выполните ",{"type":887,"tag":43,"props":1039,"children":1041},{"className":1040},[],[1042],{"type":125,"value":348},{"type":125,"value":1044},". При первом запуске система предложит выбрать редактор (nano или vim). Выберите удобный.",{"data":1046,"body":1047},{},{"type":884,"children":1048},[1049],{"type":887,"tag":22,"props":1050,"children":1051},{},[1052,1054,1060,1062,1068],{"type":125,"value":1053},"В открывшемся файле добавьте строку в формате: ",{"type":887,"tag":43,"props":1055,"children":1057},{"className":1056},[],[1058],{"type":125,"value":1059},"минуты часы день_месяца месяц день_недели команда",{"type":125,"value":1061},". Например: ",{"type":887,"tag":43,"props":1063,"children":1065},{"className":1064},[],[1066],{"type":125,"value":1067},"0 3 * * * /home/user/backup.sh",{"type":125,"value":1069}," — запуск скрипта каждый день в 3:00.",{"data":1071,"body":1072},{},{"type":884,"children":1073},[1074],{"type":887,"tag":22,"props":1075,"children":1076},{},[1077,1079,1085],{"type":125,"value":1078},"В nano: Ctrl+X, затем Y и Enter. В vim: нажмите Esc, затем ",{"type":887,"tag":43,"props":1080,"children":1082},{"className":1081},[],[1083],{"type":125,"value":1084},":wq",{"type":125,"value":1086}," и Enter. Cron автоматически загрузит новую конфигурацию.",{"data":1088,"body":1089},{},{"type":884,"children":1090},[1091],{"type":887,"tag":22,"props":1092,"children":1093},{},[1094,1095,1100],{"type":125,"value":338},{"type":887,"tag":43,"props":1096,"children":1098},{"className":1097},[],[1099],{"type":125,"value":341},{"type":125,"value":1101}," чтобы увидеть все задания текущего пользователя.",{"data":1103,"body":1104},{},{"type":884,"children":1105},[1106],{"type":887,"tag":22,"props":1107,"children":1108},{},[1109,1111,1116,1118,1123],{"type":125,"value":1110},"Чтобы удалить задание, снова выполните ",{"type":887,"tag":43,"props":1112,"children":1114},{"className":1113},[],[1115],{"type":125,"value":348},{"type":125,"value":1117}," и удалите соответствующую строку. Для полной очистки всех заданий: ",{"type":887,"tag":43,"props":1119,"children":1121},{"className":1120},[],[1122],{"type":125,"value":355},{"type":125,"value":50},[1125],{"id":1126,"title":1127,"appliesTo":1128,"author":12,"body":1130,"canonical":810,"code":810,"createdAt":2054,"description":2055,"difficulty":2056,"draft":814,"estimatedTime":2057,"extension":816,"faq":2058,"howToSteps":2068,"howToTotalTime":2087,"image":810,"keywords":2088,"locale":861,"meta":2097,"navigation":863,"path":869,"platform":865,"related":2098,"section":870,"seo":2102,"severity":810,"stem":2103,"summary":2104,"tags":2105,"twitterCreator":810,"twitterSite":810,"type":879,"updatedAt":2054,"__hash__":2108},"content_ru/guides/linux/systemd-timers.md","Systemd-таймеры: гибкая замена cron для автоматизации в Linux",[1129],"systemd 235+ (все современные дистрибутивы: Ubuntu 18.04+, Debian 9+, CentOS 7+, Fedora 25+)",{"type":14,"value":1131,"toc":2029},[1132,1136,1148,1151,1155,1204,1208,1219,1225,1318,1323,1368,1372,1378,1444,1448,1496,1500,1503,1518,1521,1525,1528,1589,1596,1598,1602,1606,1609,1621,1624,1628,1633,1688,1692,1714,1718,1722,1728,1746,1756,1760,1766,1784,1791,1795,1801,1820,1823,1825,1879,1882,1884,1888,1925,1929,1964,1971,2026],[17,1133,1135],{"id":1134},"введение-зачем-это-нужно","Введение / Зачем это нужно",[22,1137,1138,1141,1142,1144,1145,1147],{},[133,1139,1140],{},"Systemd-таймеры"," — это современный механизм планирования задач в системах, использующих systemd (практически все актуальные дистрибутивы Linux). Он пришел на смену классическому ",[43,1143,45],{},", предлагая более тесную интеграцию с системой инициализации, расширенные возможности расписания и единый журнал событий (",[43,1146,499],{},"). С помощью таймеров вы можете автоматизировать резервное копирование, очистку логов, проверку обновлений или запуск любых скриптов по расписанию, с задержкой после загрузки или даже в зависимости от других событий системы.",[22,1149,1150],{},"После прохождения этого гайда вы сможете создавать надежные и легко управляемые задания, которые будут корректно обрабатывать пропущенные запуски (например, если компьютер был выключен) и предоставлять детальную информацию о своих работах.",[17,1152,1154],{"id":1153},"требования-подготовка","Требования / Подготовка",[245,1156,1157,1169,1182,1190],{},[36,1158,1159,1162,1163,913,1166,688],{},[133,1160,1161],{},"Система с systemd:"," Убедитесь, что в вашем дистрибутиве используется systemd (проверьте ",[43,1164,1165],{},"echo $INIT_SYSTEM",[43,1167,1168],{},"ps -p 1 -o comm=",[36,1170,1171,1174,1175,1178,1179,50],{},[133,1172,1173],{},"Права суперпользователя (root):"," Для создания системных юнитов в ",[43,1176,1177],{},"/etc/systemd/system/"," и их управления требуются права администратора. Для пользовательских таймеров (без sudo) используйте ",[43,1180,1181],{},"~/.config/systemd/user/",[36,1183,1184,1187,1188,50],{},[133,1185,1186],{},"Базовое понимание systemd:"," Желательно знать, что такое unit-файлы и команда ",[43,1189,425],{},[36,1191,1192,1195,1196,738,1198,913,1201,50],{},[133,1193,1194],{},"Текстовый редактор:"," Например, ",[43,1197,268],{},[43,1199,1200],{},"vim",[43,1202,1203],{},"vi",[17,1205,1207],{"id":1206},"шаг-1-создаем-файл-службы-service","Шаг 1: Создаем файл службы (.service)",[22,1209,1210,1211,1214,1215,1218],{},"Таймер не выполняет команды напрямую. Он активирует ",[133,1212,1213],{},"файл службы"," (",[43,1216,1217],{},".service","), который содержит инструкции по запуску вашей задачи. Начнем с него.",[22,1220,1221,1222,415],{},"Давайте создадим простую службу для резервного копирования домашней директории. Сохраните этот конфиг как ",[43,1223,1224],{},"/etc/systemd/system/home-backup.service",[62,1226,1230],{"className":1227,"code":1228,"language":1229,"meta":67,"style":67},"language-ini shiki shiki-themes github-light github-dark","[Unit]\nDescription=Резервное копирование домашней директории\n# Запускать службу только если доступна сеть (опционально)\nWants=network-online.target\nAfter=network-online.target\n\n[Service]\nType=oneshot\n# Команда, которую нужно выполнить. Пример с tar и сжатием.\nExecStart=/bin/tar -czf /var/backups/home_$(date +\\%Y-\\%m-\\%d).tar.gz /home\n# Указываем, что задание выполняется один раз за запуск таймера\nRemainAfterExit=yes\n\n[Install]\nWantedBy=multi-user.target\n","ini",[43,1231,1232,1237,1242,1247,1253,1259,1265,1271,1277,1283,1289,1295,1301,1306,1312],{"__ignoreMap":67},[71,1233,1234],{"class":73,"line":74},[71,1235,1236],{},"[Unit]\n",[71,1238,1239],{"class":73,"line":81},[71,1240,1241],{},"Description=Резервное копирование домашней директории\n",[71,1243,1244],{"class":73,"line":802},[71,1245,1246],{},"# Запускать службу только если доступна сеть (опционально)\n",[71,1248,1250],{"class":73,"line":1249},4,[71,1251,1252],{},"Wants=network-online.target\n",[71,1254,1256],{"class":73,"line":1255},5,[71,1257,1258],{},"After=network-online.target\n",[71,1260,1262],{"class":73,"line":1261},6,[71,1263,1264],{"emptyLinePlaceholder":863},"\n",[71,1266,1268],{"class":73,"line":1267},7,[71,1269,1270],{},"[Service]\n",[71,1272,1274],{"class":73,"line":1273},8,[71,1275,1276],{},"Type=oneshot\n",[71,1278,1280],{"class":73,"line":1279},9,[71,1281,1282],{},"# Команда, которую нужно выполнить. Пример с tar и сжатием.\n",[71,1284,1286],{"class":73,"line":1285},10,[71,1287,1288],{},"ExecStart=/bin/tar -czf /var/backups/home_$(date +\\%Y-\\%m-\\%d).tar.gz /home\n",[71,1290,1292],{"class":73,"line":1291},11,[71,1293,1294],{},"# Указываем, что задание выполняется один раз за запуск таймера\n",[71,1296,1298],{"class":73,"line":1297},12,[71,1299,1300],{},"RemainAfterExit=yes\n",[71,1302,1304],{"class":73,"line":1303},13,[71,1305,1264],{"emptyLinePlaceholder":863},[71,1307,1309],{"class":73,"line":1308},14,[71,1310,1311],{},"[Install]\n",[71,1313,1315],{"class":73,"line":1314},15,[71,1316,1317],{},"WantedBy=multi-user.target\n",[22,1319,1320],{},[133,1321,1322],{},"Ключевые моменты:",[33,1324,1325,1335,1350,1356],{},[36,1326,1327,1330,1331,1334],{},[43,1328,1329],{},"Type=oneshot",": Процесс службы завершается после выполнения ",[43,1332,1333],{},"ExecStart",". Используется для одноразовых задач.",[36,1336,1337,1339,1340,1343,1344,1346,1347,688],{},[43,1338,1333],{},": Основная команда. Обратите внимание на экранирование ",[43,1341,1342],{},"%"," в ",[43,1345,93],{}," (нужно ",[43,1348,1349],{},"\\%",[36,1351,1352,1355],{},[43,1353,1354],{},"RemainAfterExit=yes",": Позволяет службе считаться активной после завершения команды. Полезно для мониторинга статуса.",[36,1357,1358,1359,1361,1362,313,1365,50],{},"Если нужно выполнить несколько команд, используйте скрипт и укажите его путь в ",[43,1360,1333],{},", или через ",[43,1363,1364],{},"ExecStartPre",[43,1366,1367],{},"ExecStartPost",[17,1369,1371],{"id":1370},"шаг-2-создаем-файл-таймера-timer","Шаг 2: Создаем файл таймера (.timer)",[22,1373,1374,1375,415],{},"Теперь создадим файл таймера, который будет запускать нашу службу по расписанию. Сохраните как ",[43,1376,1377],{},"/etc/systemd/system/home-backup.timer",[62,1379,1381],{"className":1227,"code":1380,"language":1229,"meta":67,"style":67},"[Unit]\nDescription=Таймер для ежедневного резервного копирования домашней директории\n\n[Timer]\n# Расписание: каждый день в 02:30\nOnCalendar=*-*-* 02:30:00\n# Если задание было пропущено (компьютер выключен), запустить его при следующей загрузке\nPersistent=true\n# Служба, которую активировать\nUnit=home-backup.service\n\n[Install]\nWantedBy=timers.target\n",[43,1382,1383,1387,1392,1396,1401,1406,1411,1416,1421,1426,1431,1435,1439],{"__ignoreMap":67},[71,1384,1385],{"class":73,"line":74},[71,1386,1236],{},[71,1388,1389],{"class":73,"line":81},[71,1390,1391],{},"Description=Таймер для ежедневного резервного копирования домашней директории\n",[71,1393,1394],{"class":73,"line":802},[71,1395,1264],{"emptyLinePlaceholder":863},[71,1397,1398],{"class":73,"line":1249},[71,1399,1400],{},"[Timer]\n",[71,1402,1403],{"class":73,"line":1255},[71,1404,1405],{},"# Расписание: каждый день в 02:30\n",[71,1407,1408],{"class":73,"line":1261},[71,1409,1410],{},"OnCalendar=*-*-* 02:30:00\n",[71,1412,1413],{"class":73,"line":1267},[71,1414,1415],{},"# Если задание было пропущено (компьютер выключен), запустить его при следующей загрузке\n",[71,1417,1418],{"class":73,"line":1273},[71,1419,1420],{},"Persistent=true\n",[71,1422,1423],{"class":73,"line":1279},[71,1424,1425],{},"# Служба, которую активировать\n",[71,1427,1428],{"class":73,"line":1285},[71,1429,1430],{},"Unit=home-backup.service\n",[71,1432,1433],{"class":73,"line":1291},[71,1434,1264],{"emptyLinePlaceholder":863},[71,1436,1437],{"class":73,"line":1297},[71,1438,1311],{},[71,1440,1441],{"class":73,"line":1303},[71,1442,1443],{},"WantedBy=timers.target\n",[22,1445,1446],{},[133,1447,1322],{},[33,1449,1450,1472,1482],{},[36,1451,1452,1455,1456,1458,1459],{},[43,1453,1454],{},"OnCalendar=*-*-* 02:30:00",": Гибкий синтаксис календаря. ",[43,1457,176],{}," означает \"любое значение\". Здесь: любой год, любой месяц, любой день в 02:30.\n",[33,1460,1461],{},[36,1462,1463,1464,1467,1468,1471],{},"Примеры: ",[43,1465,1466],{},"Mon *-*-* 09:00:00"," (каждый понедельник в 9 утра), ",[43,1469,1470],{},"*-*-1 00:00:00"," (в первый день каждого месяца).",[36,1473,1474,1477,1478,1481],{},[43,1475,1476],{},"Persistent=true",": Критически важная опция! Если компьютер был выключен в момент срабатывания таймера, ",[43,1479,1480],{},"systemd"," запустит задание сразу же при следующей загрузке системы.",[36,1483,1484,1487,1488,1491,1492,1495],{},[43,1485,1486],{},"Unit=home-backup.service",": Явно указываем, какую службу запускать. Если имя файла службы совпадает с именем таймера (например, ",[43,1489,1490],{},"home-backup.timer"," и ",[43,1493,1494],{},"home-backup.service","), этот параметр можно опустить.",[17,1497,1499],{"id":1498},"шаг-3-перезагружаем-конфигурацию-systemd","Шаг 3: Перезагружаем конфигурацию systemd",[22,1501,1502],{},"После создания обоих файлов необходимо сообщить systemd о их существовании. Выполните команду:",[62,1504,1506],{"className":64,"code":1505,"language":66,"meta":67,"style":67},"sudo systemctl daemon-reload\n",[43,1507,1508],{"__ignoreMap":67},[71,1509,1510,1512,1515],{"class":73,"line":74},[71,1511,369],{"class":92},[71,1513,1514],{"class":88}," systemctl",[71,1516,1517],{"class":88}," daemon-reload\n",[22,1519,1520],{},"Эта команда заставляет systemd перечитать все конфигурационные файлы. Без нее новые таймеры и службы не будут видны системе.",[17,1522,1524],{"id":1523},"шаг-4-активируем-и-запускаем-таймер","Шаг 4: Активируем и запускаем таймер",[22,1526,1527],{},"Теперь нужно включить таймер (чтобы он запускался автоматически при загрузке) и, возможно, запустить его сразу для теста.",[62,1529,1531],{"className":64,"code":1530,"language":66,"meta":67,"style":67},"# 1. Включить автозапуск таймера при загрузке системы\nsudo systemctl enable home-backup.timer\n\n# 2. Запустить таймер немедленно (для проверки)\nsudo systemctl start home-backup.timer\n\n# 3. Проверить статус\nsudo systemctl status home-backup.timer\n",[43,1532,1533,1538,1550,1554,1559,1570,1574,1579],{"__ignoreMap":67},[71,1534,1535],{"class":73,"line":74},[71,1536,1537],{"class":77},"# 1. Включить автозапуск таймера при загрузке системы\n",[71,1539,1540,1542,1544,1547],{"class":73,"line":81},[71,1541,369],{"class":92},[71,1543,1514],{"class":88},[71,1545,1546],{"class":88}," enable",[71,1548,1549],{"class":88}," home-backup.timer\n",[71,1551,1552],{"class":73,"line":802},[71,1553,1264],{"emptyLinePlaceholder":863},[71,1555,1556],{"class":73,"line":1249},[71,1557,1558],{"class":77},"# 2. Запустить таймер немедленно (для проверки)\n",[71,1560,1561,1563,1565,1568],{"class":73,"line":1255},[71,1562,369],{"class":92},[71,1564,1514],{"class":88},[71,1566,1567],{"class":88}," start",[71,1569,1549],{"class":88},[71,1571,1572],{"class":73,"line":1261},[71,1573,1264],{"emptyLinePlaceholder":863},[71,1575,1576],{"class":73,"line":1267},[71,1577,1578],{"class":77},"# 3. Проверить статус\n",[71,1580,1581,1583,1585,1587],{"class":73,"line":1273},[71,1582,369],{"class":92},[71,1584,1514],{"class":88},[71,1586,428],{"class":88},[71,1588,1549],{"class":88},[22,1590,1591,1592,1595],{},"Вы должны увидеть активный (",[43,1593,1594],{},"active (waiting)",") таймер и время следующего запуска (Next elapse).",[325,1597],{},[17,1599,1601],{"id":1600},"шаг-5-мониторинг-и-управление","Шаг 5: Мониторинг и управление",[113,1603,1605],{"id":1604},"просмотр-всех-активных-таймеров","Просмотр всех активных таймеров",[22,1607,1608],{},"Чтобы увидеть список всех настроенных таймеров и время их следующего срабатывания, используйте:",[62,1610,1612],{"className":64,"code":1611,"language":66,"meta":67,"style":67},"systemctl list-timers\n",[43,1613,1614],{"__ignoreMap":67},[71,1615,1616,1618],{"class":73,"line":74},[71,1617,425],{"class":92},[71,1619,1620],{"class":88}," list-timers\n",[22,1622,1623],{},"Эта команда покажет вам таблицу с именем таймера, временем следующего запуска, временем последнего запуска и юнитом, который он активирует.",[113,1625,1627],{"id":1626},"просмотр-логов","Просмотр логов",[22,1629,1630,1631,415],{},"Все, что выводит ваша служба (включая ошибки), попадает в журнал systemd. Для просмотра используйте ",[43,1632,499],{},[62,1634,1636],{"className":64,"code":1635,"language":66,"meta":67,"style":67},"# Логи конкретного таймера и связанной с ним службы\nsudo journalctl -u home-backup.timer -u home-backup.service -f\n\n# Логи за последний день\nsudo journalctl -u home-backup.service --since \"1 day ago\"\n",[43,1637,1638,1643,1663,1667,1672],{"__ignoreMap":67},[71,1639,1640],{"class":73,"line":74},[71,1641,1642],{"class":77},"# Логи конкретного таймера и связанной с ним службы\n",[71,1644,1645,1647,1650,1652,1655,1657,1660],{"class":73,"line":81},[71,1646,369],{"class":92},[71,1648,1649],{"class":88}," journalctl",[71,1651,378],{"class":84},[71,1653,1654],{"class":88}," home-backup.timer",[71,1656,378],{"class":84},[71,1658,1659],{"class":88}," home-backup.service",[71,1661,1662],{"class":84}," -f\n",[71,1664,1665],{"class":73,"line":802},[71,1666,1264],{"emptyLinePlaceholder":863},[71,1668,1669],{"class":73,"line":1249},[71,1670,1671],{"class":77},"# Логи за последний день\n",[71,1673,1674,1676,1678,1680,1682,1685],{"class":73,"line":1255},[71,1675,369],{"class":92},[71,1677,1649],{"class":88},[71,1679,378],{"class":84},[71,1681,1659],{"class":88},[71,1683,1684],{"class":84}," --since",[71,1686,1687],{"class":88}," \"1 day ago\"\n",[113,1689,1691],{"id":1690},"остановка-и-отключение","Остановка и отключение",[33,1693,1694,1703],{},[36,1695,1696,1699,1700],{},[133,1697,1698],{},"Остановить"," текущий запуск (если он в процессе): ",[43,1701,1702],{},"sudo systemctl stop home-backup.timer",[36,1704,1705,1491,1707,1710,1711],{},[133,1706,1698],{},[133,1708,1709],{},"отключить"," автозапуск: ",[43,1712,1713],{},"sudo systemctl disable --now home-backup.timer",[17,1715,1717],{"id":1716},"шаг-6-расширенные-возможности-и-примеры","Шаг 6: Расширенные возможности и примеры",[113,1719,1721],{"id":1720},"запуск-с-задержкой-после-загрузки","Запуск с задержкой после загрузки",[22,1723,1724,1725,415],{},"Если задача должна запускаться не по календарю, а через некоторое время после загрузки системы (например, чтобы дать время на запуск сетевых служб), используйте ",[43,1726,1727],{},"OnBootSec",[62,1729,1731],{"className":1227,"code":1730,"language":1229,"meta":67,"style":67},"[Timer]\nOnBootSec=15min\nUnit=home-backup.service\n",[43,1732,1733,1737,1742],{"__ignoreMap":67},[71,1734,1735],{"class":73,"line":74},[71,1736,1400],{},[71,1738,1739],{"class":73,"line":81},[71,1740,1741],{},"OnBootSec=15min\n",[71,1743,1744],{"class":73,"line":802},[71,1745,1430],{},[22,1747,1748,1749,1491,1752,1755],{},"Это запустит службу через 15 минут после загрузки. Можно комбинировать: ",[43,1750,1751],{},"OnBootSec=5min",[43,1753,1754],{},"OnUnitActiveSec=1h"," для запуска через 5 минут после загрузки и затем каждый час.",[113,1757,1759],{"id":1758},"периодический-запуск-интервал","Периодический запуск (интервал)",[22,1761,1762,1763,415],{},"Для интервалов, не привязанных к календарю (например, \"каждые 30 минут\"), используйте ",[43,1764,1765],{},"OnUnitActiveSec",[62,1767,1769],{"className":1227,"code":1768,"language":1229,"meta":67,"style":67},"[Timer]\nOnUnitActiveSec=30min\nUnit=home-backup.service\n",[43,1770,1771,1775,1780],{"__ignoreMap":67},[71,1772,1773],{"class":73,"line":74},[71,1774,1400],{},[71,1776,1777],{"class":73,"line":81},[71,1778,1779],{},"OnUnitActiveSec=30min\n",[71,1781,1782],{"class":73,"line":802},[71,1783,1430],{},[22,1785,1786,1787,1790],{},"Это означает: запускать службу каждые 30 минут после ",[133,1788,1789],{},"последнего успешного запуска"," этой службы.",[113,1792,1794],{"id":1793},"случайный-рандомизированный-запуск","Случайный (рандомизированный) запуск",[22,1796,1797,1798,415],{},"Чтобы избежать \"шторма\" при одновременном запуске множества таймеров на многих машинах (например, для обновлений), добавьте ",[43,1799,1800],{},"RandomizedDelaySec",[62,1802,1804],{"className":1227,"code":1803,"language":1229,"meta":67,"style":67},"[Timer]\nOnCalendar=daily\nRandomizedDelaySec=1h\n",[43,1805,1806,1810,1815],{"__ignoreMap":67},[71,1807,1808],{"class":73,"line":74},[71,1809,1400],{},[71,1811,1812],{"class":73,"line":81},[71,1813,1814],{},"OnCalendar=daily\n",[71,1816,1817],{"class":73,"line":802},[71,1818,1819],{},"RandomizedDelaySec=1h\n",[22,1821,1822],{},"Задание будет запущено в случайный момент в течение часа после полуночи.",[17,1824,671],{"id":670},[245,1826,1827,1840,1849],{},[36,1828,1829,1832,1833,1836,1837,50],{},[133,1830,1831],{},"Убедитесь, что таймер активен:"," ",[43,1834,1835],{},"systemctl is-active home-backup.timer"," должен вернуть ",[43,1838,1839],{},"active",[36,1841,1842,1832,1845,1848],{},[133,1843,1844],{},"Проверьте расписание:",[43,1846,1847],{},"systemctl list-timers | grep home-backup"," покажет время следующего запуска.",[36,1850,1851,1854,1855,1858,1859],{},[133,1852,1853],{},"Дождитесь срабатывания"," (или запустите вручную ",[43,1856,1857],{},"sudo systemctl start home-backup.timer",") и проверьте:\n",[33,1860,1861,1867,1873],{},[36,1862,1863,1864],{},"Файл бэкапа: ",[43,1865,1866],{},"ls -lh /var/backups/",[36,1868,1869,1870],{},"Статус службы: ",[43,1871,1872],{},"systemctl status home-backup.service",[36,1874,1875,1876],{},"Журнал: ",[43,1877,1878],{},"sudo journalctl -u home-backup.service --no-pager -n 20",[22,1880,1881],{},"Если бэкап создался и в логах нет ошибок — всё работает.",[17,1883,702],{"id":701},[113,1885,1887],{"id":1886},"таймер-не-запускается-по-расписанию","Таймер не запускается по расписанию",[33,1889,1890,1903,1911],{},[36,1891,1892,1898,1899,1902],{},[133,1893,1894,1895,50],{},"Проверьте синтаксис ",[43,1896,1897],{},"OnCalendar"," Используйте ",[43,1900,1901],{},"systemd-analyze calendar '*-*-* 02:30:00'"," для валидации.",[36,1904,1905,1910],{},[133,1906,1907,1908],{},"Убедитесь, что ",[43,1909,1476],{}," установлено, если компьютер может быть выключен в момент запуска.",[36,1912,1913,1918,1919,1921,1922,1924],{},[133,1914,1915,1916,50],{},"Проверьте, не конфликтует ли таймер с ",[43,1917,45],{}," Systemd и ",[43,1920,45],{}," независимы. Если задача уже есть в ",[43,1923,45],{},", отключите её, чтобы избежать двойного запуска.",[113,1926,1928],{"id":1927},"служба-запущенная-таймером-завершается-с-ошибкой","Служба, запущенная таймером, завершается с ошибкой",[33,1930,1931,1943,1951],{},[36,1932,1933,1939,1940,1942],{},[133,1934,1935,1936,50],{},"Смотрите логи ",[43,1937,1938],{},"journalctl -u \u003Cservice>.service"," Ошибка почти всегда в команде ",[43,1941,1333],{}," (неверный путь, нет прав, недостаточно места).",[36,1944,1945,1948,1949,50],{},[133,1946,1947],{},"Проверьте права доступа"," к скрипту/команде и к целевым директориям/файлам. Для системных служб часто требуется ",[43,1950,884],{},[36,1952,1953,1957,1958,913,1961,50],{},[133,1954,1907,1955],{},[43,1956,1329],{}," соответствует вашей задаче. Если команда запускает демон, может потребоваться ",[43,1959,1960],{},"Type=forking",[43,1962,1963],{},"Type=notify",[113,1965,1967,1968],{"id":1966},"таймер-не-виден-в-systemctl-list-timers","Таймер не виден в ",[43,1969,1970],{},"systemctl list-timers",[33,1972,1973,1982,1994,2007],{},[36,1974,1975,1981],{},[133,1976,1977,1978],{},"Выполнили ли вы ",[43,1979,1980],{},"daemon-reload"," после создания файлов?",[36,1983,1984,1987,1988,1991,1992,50],{},[133,1985,1986],{},"Файлы имеют правильные имена и расположение?"," Для системных юнитов: ",[43,1989,1990],{},"/etc/systemd/system/\u003Cname>.timer",". Для пользовательских: ",[43,1993,1181],{},[36,1995,1996,1832,1999,2002,2003,2006],{},[133,1997,1998],{},"Таймер включен?",[43,2000,2001],{},"sudo systemctl enable \u003Cname>.timer"," (для системного) или ",[43,2004,2005],{},"systemctl --user enable \u003Cname>.timer"," (для пользовательского).",[36,2008,2009,1832,2012,2015,2016,2018,2019,2022,2023,688],{},[133,2010,2011],{},"Проверьте, не активирован ли таймер сразу:",[43,2013,2014],{},"systemctl status \u003Cname>.timer",". Если он ",[43,2017,1594],{},", он работает. Если ",[43,2020,2021],{},"inactive (dead)",", возможно, его нужно запустить (",[43,2024,2025],{},"start",[792,2027,2028],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":67,"searchDepth":81,"depth":81,"links":2030},[2031,2032,2033,2034,2035,2036,2037,2042,2047,2048],{"id":1134,"depth":81,"text":1135},{"id":1153,"depth":81,"text":1154},{"id":1206,"depth":81,"text":1207},{"id":1370,"depth":81,"text":1371},{"id":1498,"depth":81,"text":1499},{"id":1523,"depth":81,"text":1524},{"id":1600,"depth":81,"text":1601,"children":2038},[2039,2040,2041],{"id":1604,"depth":802,"text":1605},{"id":1626,"depth":802,"text":1627},{"id":1690,"depth":802,"text":1691},{"id":1716,"depth":81,"text":1717,"children":2043},[2044,2045,2046],{"id":1720,"depth":802,"text":1721},{"id":1758,"depth":802,"text":1759},{"id":1793,"depth":802,"text":1794},{"id":670,"depth":81,"text":671},{"id":701,"depth":81,"text":702,"children":2049},[2050,2051,2052],{"id":1886,"depth":802,"text":1887},{"id":1927,"depth":802,"text":1928},{"id":1966,"depth":802,"text":2053},"Таймер не виден в systemctl list-timers","2026-02-16 18:55:58","Подробное руководство по настройке systemd-таймеров. Узнайте, как создавать, управлять и отлаживать задания по расписанию с помощью systemd. Практические примеры и советы.","medium","15-30 минут",[2059,2062,2065],{"question":2060,"answer":2061},"В чем основное преимущество systemd-таймера перед cron?","Systemd-таймеры интегрированы с журналом systemd (journalctl), поддерживают календарные события (например 'Mon *-*-* 09:00:00' для каждого понедельника), могут запускаться с задержкой после загрузки системы (OnBootSec) и не зависят от отдельного демона.",{"question":2063,"answer":2064},"Как проверить, что мой таймер работает?","Используйте `systemctl list-timers --all` для просмотра всех таймеров и времени следующего запуска. Логи конкретного таймера смотрите через `journalctl -u \u003Cимя_таймера>.timer`.",{"question":2066,"answer":2067},"Можно ли запускать таймер только при наличии сети?","Да, в юните службы (не таймера!) укажите `Wants=network-online.target` и `After=network-online.target`. Это потребует, чтобы сеть была полностью активна перед запуском.",[2069,2072,2075,2078,2081,2084],{"name":2070,"text":2071},"Понимание структуры: два юнита","Systemd-таймер состоит из двух файлов: файл службы (`.service`) с описанием задачи и файл таймера (`.timer`) с расписанием. Таймер активирует службу по заданному расписанию.",{"name":2073,"text":2074},"Создание файла службы","Создайте файл `/etc/systemd/system/my-backup.service` (или в `~/.config/systemd/user/` для пользовательского таймера). Укажите `[Service]` с `Type=oneshot` и команду `ExecStart`.",{"name":2076,"text":2077},"Создание файла таймера","Создайте файл `/etc/systemd/system/my-backup.timer`. В секции `[Timer]` задайте расписание через `OnCalendar` (календарь) или `OnActiveSec` (интервал). Укажите `Unit=my-backup.service`.",{"name":2079,"text":2080},"Перезагрузка конфигурации systemd","После создания файлов выполните `sudo systemctl daemon-reload`, чтобы systemd узнал о новых юнитах.",{"name":2082,"text":2083},"Активация и запуск таймера","Включите таймер для автозапуска при загрузке: `sudo systemctl enable my-backup.timer`. Запустите его немедленно: `sudo systemctl start my-backup.timer`.",{"name":2085,"text":2086},"Мониторинг и отладка","Проверяйте статус: `systemctl status my-backup.timer`. Смотрите историю запусков таймера и связанной службы в журналах: `journalctl -u my-backup.timer -u my-backup.service --since \"1 hour ago\"`.","PT20M",[2089,2090,2091,2092,2093,2094,2095,2096],"systemd timer","запуск службы по расписанию systemd","как настроить cron через systemd","systemd timer unit пример","отладка systemd таймера","замена cron systemd","автоматизация задач linux systemd","systemd timer vs cron",{},[2099,2100,2101],"/guides/linux/systemd-service-files","/guides/linux/cron-advanced","/errors/linux/systemd-failed-to-start",{"title":1127,"description":2055},"guides/linux/systemd-timers","В этом гайде вы научитесь использовать systemd-таймеры — современный и мощный механизм планирования задач в Linux, который предлагает больше возможностей, чем классический cron. Мы разберем создание юнитов, управление через systemctl и решение типичных проблем.",[1480,865,878,45,2106,2107,877],"администрирование","timer","AecptPlgrI_6D-HCeO3Jt8hMyL_1oA05JgVxnlxumzQ"]