Как да добавите задача в Cron
29 May 2025, 22:11:27
Една от най-известните и удобни утилити за автоматизация на задачи на сървъра е Cron. Изпълнението на команди и скриптове по график - това е задачата на тази програма. Основни действия, но именно с тяхна помощ можем да автоматизираме задачи като архивиране, актуализиране и събиране на данни, почистване на временни файлове и много други.В тази статия ще обърнем внимание на файла crontab, неговия синтаксис и написването на команди с конкретни примери.
Cron и Crontab
Защо говорим за добавяне на задачи в cron, но всъщност използваме командата crontab за това?Cron - това е системна програма, услуга, сервиз. Тоест самата програма, която следи зададените команди, времето и реализира самата функционалност.
Crontab - това е, по същество, файл, в който записваме времето, задачата за изпълнение и някои други параметри.
Добавяне на задача и структура на файла crontab
За да отворим редактора за промяна или създаване на cron задача за текущия потребител, ще използваме командата:crontab -e
Ще се отвори редакторът по подразбиране (например nano или vim). Как да го промените, можете да разберете в статията Как да промените редактора за crontab.Внимание, в класическата разкладка на клавиатурата qwerty буквата E се намира до R. Ако въведете командата crontab с параметър -r, това ще изтрие всички правила от сrontab-файла на текущия потребител.

В горната част на файла можете да видите променливите на околната среда. Те задават условията за изпълнение на задачите в Cron. В примера са използвани две променливи, които се срещат по-често на работните сървъри.
Основни променливи в crontab
- MAILTO - задава имейл адрес, на който ще се изпраща отчет за изпълнението на задачите cron. MAILTO="" изключва изпращането;
- PATH - списък с директории с изпълними файлове;
- SHELL - задача командния интерпретатор за стартиране на задачи. По подразбиране: sh;
- HOME - директория, от която cron стартира команди. Важна променлива, ако в командите се използват относителни пътища (например ./cron.sh), което е лоша практика.
Графикът се задава с пет стойности:
- Минути (0-59)
- Часове (0-23)
- Ден на месеца (1-31)
- Месец от годината (1-12)
- Ден от седмицата (0-7 (0 и 7 — неделя))
- * - съответства на всякаква стойност (всяка минута, всеки час и т.н.);
- , - разделител на списък със стойности;
- - - диапазон на стойностите;
- / - "делител" на значението.
* * * * * cron.sh >> /root/cron.log 2>&1
Той може да се тълкува като: Изпълнява посочената команда всяка минута(*) на всеки час(*) на всеки ден от месеца(*) на всеки месец от годината(*) на всеки ден от седмицата(*). По-просто казано - всяка минута. Това е минималният честотен период, с който cron може да изпълнява задача.Обърнете внимание, че пътят до изпълнимия файл cron.sh не е посочен, но задачата се изпълнява успешно:

Това се случва, защото е зададена променлива на средата PATH, в която е посочена директорията, където се намира този скрипт. Това обаче е лош тон и такъв запис е използван само като пример за работа на променлива на средата. На работни сървъри винаги е по-добре да се използва пълен път до изпълнимия файл или скрипт.
Ще променим графика на задачата и ще добавим конкретно време за стартиране, например:
0 * * * * cron.sh >> /root/cron.log 2>&1
Тази задача ще се стартира на 0 минути от всеки час, т.е. веднъж на час.Както сте разбрали, 0 е указание за конкретна минута, нулева. За да се стартира командата на всеки час в 20 минути, задачата трябва да се преобразува в следния вид:
20 * * * * cron.sh >> /root/cron.log 2>&1
Същата логика важи и за други значения на времето и датата. Нека разгледаме втората задача в примера:
20 4 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
То се стартира всеки ден(*) в 4 часа и 20 минути.Да приемем, че не е необходимо да създаваме резервно копие толкова често, нека променим тази задача, така че да се изпълнява в неделя (0 или 7) в 3 часа сутринта:

Също така е възможно да се посочат няколко конкретни значения, разделени със запетая:
0 3 * * 0,3 /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Тази задача ще се стартира всяка неделя и сряда точно в 3 часа сутринта.За да посочим период, диапазон от стойности, използваме -. Заданието ще се стартира в делнични дни, от понеделник до петък (1-5), в 3 часа сутринта:
0 3 * * 1-5 /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Много често за стартиране на задача през всеки зададен интервал от време се използва израз от вида:
*/30 * * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Тази задача на Cron ще се изпълнява на всеки 30 минути.Обаче не се нуждаем от толкова много резервни копии, по-целесъобразно е да стартираме резервно копиране на всеки два дни:
0 0 */2 * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Освен полетата за време, графикът може да се задава със специални съкращения, които се четат от хора.
Съкращения на време на crontab
- @reboot - стартиране на задача след стартиране на системата;
- @hourly - всеки час;
- @daily - веднъж на ден (в 00:00);
- @midnight = @daily;
- @weekly - веднъж седмично (неделя в 00:00);
- @monthly - веднъж месечно (на 1-во число в 00:00);
- @annually - веднъж годишно (1 януари в 00:00);
- @yearly = @annually.
За да запазите промените в Crontab и да излезете, ако използвате редактора Nano, натиснете Ctrl + O и Ctrl + X.
Ако използвате Vim, натиснете Esc, въведете командата :wq и натиснете Enter.
Ще получите уведомление за добавяне на нови задачи:

За да видите списъка с cron задачи на текущия потребител, можете да използвате командата:
crontab -l

Подробно разгледахме процеса на добавяне на cron задачи, синтаксиса на Crontab. Но ако имате затруднения с тази задача на нашите VPS и специализирани сървъри, винаги можете да се обърнете към техническата поддръжка, ще се радваме да ви помогнем!