Планиране на задачи в Linux с помощта на Crontab

  • Cron е демонът, който изпълнява планирани задачи, а Crontab е файлът, където те са дефинирани, с гъвкав синтаксис, базиран на пет полета за време и команди.
  • Правилната конфигурация на времето, разрешенията, абсолютните пътища и променливите на средата е ключова за гарантиране, че cron задачите се изпълняват правилно без тихи грешки.
  • Cron ви позволява да автоматизирате архивиране, почистване, актуализации и наблюдение, но ако е лошо планиран, може да повлияе на производителността и сигурността на системата.
  • Съществуват инструменти и алтернативи като Anacron, Fcron, launchd или външни услуги, които разширяват или заместват Cron в по-сложни сценарии или в други системи.

Планиране на задачи в Linux с помощта на Crontab

Ако използвате Linux ежедневно, рано или късно ще ви е необходим Автоматизирайте повтарящи се задачи с Cron и CrontabАрхивиране, актуализации, генериране на отчети, почистване на файлове, наблюдение… Ръчното правене на всичко това отнема много време и лесно се забравя. Тук се намесва Cron, крайъгълен камък на системната администрация на Unix и GNU/Linux в продължение на десетилетия.

Въпреки че на пръв поглед синтаксисът на Crontab може да изглежда малко плашещ, след като разберете неговата логика, ще видите, че Планирането на задачи в Linux с Crontab е много по-лесно, отколкото изглеждаТази статия предоставя изчерпателно ръководство: какво е Cron, какво е Crontab, как да се пишат правила, как да се отстраняват грешки, потенциалното му въздействие върху производителността, външни инструменти, които можете да използвате, алтернативи в други системи и случаи на употреба както за дома, така и за бизнеса.

Разлики между Cron и Crontab

За Cron и Crontab често се говори, сякаш са едно и също нещо, но в действителност... Те са две различни части, които работят заедно.Разбирането на тази разлика ще ви спести много проблеми, когато трябва да отстранявате грешки в задачи, които не се изпълняват.

  • Cron Това е демонът, който работи във фонов режим от момента на стартиране на системата. Неговата работа е много проста: преглеждайте поредица от конфигурационни файлове всяка минута и проверете дали е необходимо да се изпълнят някакви планирани задачи според датата и часа на системата.
  • кронтабОт своя страна, това е текстов файл, където са дефинирани тези задачиВсеки потребител може да има свой собствен crontab файл, със свои правила и скриптове, които се изпълняват с неговите разрешения. Cron демонът чете тези файлове и изпълнява командите, когато е уместно.

Във всяка съвременна Linux дистрибуция ще намерите и двата компонента налични по подразбиране, така че Можете да планирате повтарящи се задачи в почти всяка дистрибуция, било то Debian, Ubuntu, Oracle Linux, CentOS, Rocky, Fedora и др.

Cron

Какво е Cron и защо системното време е критично?

Крон е системен демон, който се стартира при стартиране на LinuxОбикновено се стартира чрез класически скриптове за зареждане в /etc/init.d или по еквивалентни маршрути, като например /etc/rc.dили използвайки системни модули (service crond или cron, в зависимост от дистрибуцията). Проверява се всяка минута:

/etc/crontab, /etc/cron.d, /var/spool/cron и /var/spool/cron/crontabs (Точният път варира в зависимост от дистрибуцията), търсейки записи, които съответстват на текущата минута. Ако намери такива, изпълнява посочената команда.

Нещо, което много хора пренебрегват, е, че Cron разчита изцяло на системното времеАко часовникът или часовата зона са настроени неправилно, задачите ви ще се изпълняват в грешно време. За да проверите часа на съвременни системи, можете да използвате:

timedatectl

Тази команда показва местното време, UTC, часовата зона и дали системата се синхронизира с NTP (Network Time Protocol) сървъри. В идеалния случай, NTP синхронизацията е активназащото по този начин часовникът се коригира автоматично.

Ако видите, че часовата зона е неправилна, можете да я промените с нещо подобно timedatectl set-timezone Европа/Мадрид или друга зона, която съответства на вашата държава. Също така, в много инсталации на Linux, NTP се конфигурира автоматично, но ако искате да го персонализирате, можете... /etc/ntp.conf или използвайте алтернативни услуги като chrony.

Какво е Crontab и как е структуриран?

Кронтаб е файл, в който записвате правилата за изпълнение на планираните задачиВсеки ред (без коментарите) представлява „задача“: кога се изпълнява и каква команда се изпълнява. Обикновено всеки потребител има свой собствен crontab в директорията на spool-а. / var / макара / cron o /var/spool/cron/crontabs, според дистрибутора.

За да управлявате личния си crontab, използвайте командата кронтаб с няколко много основни, но мощни опции. Файловете не се редактират ръчно с редактор на сурови файлове, а чрез тази команда, за да се избегнат грешки при разрешения или форматиране.

Основният синтаксис на един ред в Crontab е базиран на пет времеви полета плюс командата:

m h dom mon dow comando

  • Минуто (м): стойности от 0 до 59.
  • планина (h): стойности от 0 до 23.
  • Ден от месеца (Неделя): от 1 до 31.
  • Месец (пон): от 1 до 12 или съкратено име (януари, февруари и т.н., според системата).
  • Делничен ден (надолу): от 0 до 6 или от 0 до 7, като неделя е 0 (а понякога и 7).
  • команда: всяка команда, която можете да изпълните в терминала, включително скриптове и пренасочвания.

Типичен пример би бил:

00 19 * * * /home/usuario/scripts/backup.sh

Този ред показва, че скриптът ще бъде изпълнен всеки ден в 19:00 ч. (19:00 ч.), независимо от деня от месеца, месеца или деня от седмицата.

кронтаб

Как да създадете, редактирате и изброите вашия Crontab

За да работите с личния си файл със задачи, почти винаги използвате самата команда. кронтаб. Идеята е в това Не редактирайте ръчно файловете в /var/spool/cron/crontabs, тъй като са проектирани да се управляват автоматично от системата.

Най-често срещаните поръчки са:

  • кронтаб -еОтворете вашия crontab в текстовия редактор по подразбиране (в много дистрибуции) Vim o Нано) за създаване или промяна на записи.
  • crontab -l: показва на екрана всички задачи, планирани за вашия потребител.
  • crontab -rИзтрийте целия си crontab; това е необратимо действие. Не иска потвърждение, ако не добавите -i.
  • crontab -i -r: иска потвърждение преди изтриване на crontab файла.
  • crontab файл: заменете текущия си crontab със съдържанието на посочения файл.
  • crontab -u потребител: управление на crontab на друг потребител (само root или тези с разрешения).
  • crontab -c реж: На системи, които го поддържат, определя директорията, в която ще се съхранява crontab.

Ако искате да архивирате настройките си, можете да направите нещо толкова просто, като:

crontab -l > ~/crontab_backup.txt

И ако се наложи да го възстановите по-късно, просто:

crontab ~/crontab_backup.txt

Разширен синтаксис: специални символи в Crontab

В допълнение към числата, Crontab ви позволява да използвате Специални символи, които правят синтаксиса много по-гъвкавБлагодарение на тях можете да изразявате диапазони, списъци или интервали по компактен начин.

  • * (звездичка): показва „всички възможни стойности“ в това поле. Например * във времевото поле Това означава всички часове.
  • , (Яжте)отделно едно списък с конкретни стойности, например: 0 6,18 * * * Провежда се в 6:00 и 18:00 часа.
  • - (сценарий): определя a непрекъснат диапазон, например: 0 8-17 * * 1-5 Работи на всеки час от 8:00 до 17:00 часа, от понеделник до петък.
  • / (наклонена черта)маркирайте a стъпка или интервал, Например, */10 * * * * означава „на всеки 10 минути“.
  • диапазон/с изключение на (в зависимост от имплементацията): някои варианти позволяват дефиниране на изключени стойности, въпреки че това не е стандартно във всички cron задачи.

Типичен пример за комбинирана употреба би бил:

*/5 2 * * 1-5 /bin/ejecutar/script.sh

Този ред стартира командата на всеки 5 минути през втория час (2:00) от понеделник до петъкТова е компактен начин да се замени дълъг списък с минути.

Характерът # (подложка) в началото на реда служи за добавете коментариВсичко след този символ на същия ред се игнорира, което е идеално за документиране на съществуването на дадена задача или за временно деактивиране, без да се изтрива.

Ключови думи и времеви преки пътища в Crontab

За най-често срещаните случаи Crontab предлага преки пътища под формата на „резервирани думи“ Те заместват всички полета за време. Те са много полезни, когато искате нещо като „всеки ден“ или „всеки час“, без да мислите за числа.

  • @рестартиране: изпълнява командата след като системата стартира.
  • @годишно o @годишно: веднъж годишно, еквивалентно на 0 0 1 1 *.
  • @месечно: веднъж месечно, на първия ден в полунощ, еквивалентно на 0 0 1 * *.
  • @седмично: веднъж седмично, в полунощ на ден 0 (обикновено неделя), еквивалентно на 0 0 * * 0.
  • @ежедневно o @midnight: веднъж дневно, в 00:00, еквивалентно на 0 0 * * *.
  • @на час: веднъж на всеки час, в минута 0, еквивалентно на 0 * * * *.

Например, ако искате да се изпълни скрипт на всеки час, достатъчно с:

@hourly /bin/ejecutar/script.sh

И ако искате да стартирате скрипт за поддръжка след всяко рестартиранеБихте използвали:

@reboot /ruta/a/mi_script.sh

Променливи на средата и синтаксис на командите

Типичен източник на грешки е, че Cron работи в минимална средаНе те зарежда .bashrc нито цялата ви потребителска среда, така че PATH е много ограничен (обикновено е нещо подобно /usr/bin:/binТова прави команди като Python, Git, PHP или Pip Те не могат да бъдат намерени, ако не използвате абсолютния път.

За да избегнете това, имате две възможности: Винаги използвайте пълни маршрути във вашите скриптове (например, /usr/bin/python3 вместо python) o Дефинирайте променливите на средата в началото на вашия crontabПример би бил:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/bash
HOME=/home/usuario

Тези редове се поставят в началото на crontab файла, без времеви полетаи да повлияят на другите работни места, които декларирате по-долу. Можете също така да дефинирате ПОЩА да посочи на кой имейл адрес се изпращат стандартните и грешките от заданията.

Не забравяйте, че Командите в Crontab приемат целия синтаксис на shellМожете да пренасочите изхода към файл, да свържете команди чрез канали и т.н. Например, към запазване на целия изход на скрипта в лог:

* * * * * /home/usuario/helloworld.sh >> /var/log/logs.log 2>&1

И ако искате напълно заглушаване на съобщенията и отказ от получаване на имейли За тази работа можете да пренасочите към / Сътрудничество / нула:

* * * * * /home/usuario/helloworld.sh >/dev/null 2>&1

Управление на изхода: лог файлове и имейл

В зависимост от дистрибуцията и конфигурацията, изходът от Cron може да се обработва по няколко начина. В системи като Oracle Linux или минималистичен Debian, ако няма инсталиран пощенски агент, Демонът cron изпраща изхода директно към системата за регистриране..

В много случаи можете да видите cron активността във файлове като:

  • /var/log/cron (типично за Oracle Linux, CentOS, RHEL).
  • / Var / дневник / Syslog (често срещано в Debian и производните).

Например за филтриране само на съобщения, свързани с cron В система, която използва syslog, можете да направите нещо подобно на:

grep CRON /var/log/syslog

Информацията обикновено е кратка (време, потребител, команда), но ви помага да видите дали нещо работи или дали не работи.

Ако инсталирате агент за транспортиране на поща (MTA) като Postfix или Sendmail, след което резултатът от заданията се изпраща към локалната пощенска опашка на потребителяОбикновено се съхранява в /var/spool/mail/$USER или подобни маршрути и можете да го прочетете с инструменти като mailx (команда mail).

Освен това можете да контролирате получателя на cron имейли, като използвате променливата ПОЩА в началото на crontab-а:

MAILTO="tu.correo@ejemplo.com"

Ако оставите MAILTO празно, ето така:

MAILTO=""

След това Няма да бъде изпращан имейл за никоя от задачите, дефинирани в този crontab.Това е полезно, ако имате много задачи, които генерират постоянен резултат.

crontab гуру

Инструменти и помощни програми за работа с Cron

Ако не ви е удобно да пишете cron изрази на ръка, има няколко... Инструменти, които ви помагат да генерирате правила без да правите грешкиНякои са уеб услуги, други са графични приложения.

  • Кронтаб Гуру: Много практична страница, където пишете cron израз и той... Обяснете в текст, разбираем за човек, какво правиТой ви предупреждава за грешки и предлага често срещани примери и съвети.
  • Генератор на Cron задачиОнлайн асистент за генериране на cron изрази от опции като време, ден, интервал и др. Позволява ви да създавате повтарящи се задачи с предварително зададени настройки и ги персонализирайте.
  • EasyCron: облачна услуга за планиране на HTTP заявки към URL адреси през определени интервали. Широко използван за стартиране на уеб скриптове, API задачи и др., с контролен панел, лог файлове и имейл известия.
  • KDE Cron (KCron)графичен инструмент, интегриран в KDE средата за Създавайте, променяйте и изтривайте cron задачи, без да докосвате командния редПозволява ви да избирате часове и дати от визуален интерфейс.
  • Cron Maker: онлайн генератор на cron изрази, предназначен за интегрирайте се с библиотеката Quartz (широко използван в Java среди), но също така полезен за разбиране на сложни комбинации.

Тези помощни програми не заместват Cron на вашата система, но Те опростяват композиционната част на изразанамаляване на синтактичните грешки.

Видове Crontab: системни и потребителски

В Linux има два основни типа конфигурационни файлове за планирани задачи: системен crontab и потребителски crontabИ двата използват много подобен синтаксис, но не се управляват по един и същи начин.

El Cronab на системата, обикновено в / И т.н. / кронтаб и във файловете на /etc/cron.d, обикновено изисква root праваИзползва се за критични системни задачи (ротация на лог файлове, поддръжка на база данни, задачи за архивиране на високо ниво и др.) и, за разлика от потребителския crontab, изрично включва потребителското поле във всеки ред, за да посочи Под каква самоличност се изпълнява командата?.

Лос Потребителски crontab се управляват с кронтаб -е и се съхраняват в /var/spool/cron/crontabs или подобно място. Само потребителят може да изпраща своите задачи. (или root, който може да управлява cron задачите на другите) и те не трябва да се редактират директно. За да ограничите кой може да използва cron, можете да промените файловете /etc/cron.allow y /etc/cron.deny.

Влияние на Cron и Crontab върху производителността

Въпреки че самият Cron консумира много малко ресурси, лошото планиране на задачите може влияят негативно върху производителността на систематаПроблемът обикновено не е в cron демона, а в това, което му командваме да изпълни.

Когато планирате много задачи да се задействат едновременно, можете да причините Пикове на натоварване на процесора и RAM паметтаНапример, едновременното изпълнение на три големи резервни копия, преиндексиране на базата данни и скрипт за анализ на лог файлове е почти гаранция, че сървърът ще се забави.

Ако задачите включват работа в мрежа (отдалечени копия, синхронизации с rclone(масово предаване на данни), можете да генерирате претоварване на честотната лента, увеличена латентност и pingзасягащи други услуги, които зависят от връзката.

Съществува и риск от конфликти на задачиДва скрипта, които действат едновременно върху един и същ файл или база данни с различни операции, могат да причинят повреда на данните или странни повреди, които са трудни за диагностициране.

За да ограничите въздействието, можете да използвате инструменти като хубаво за намаляване на приоритета на процесора на дадена задача или cpulimit за да ограничите максималния процент от процесора, който даден процес може да консумира:

  • Нисък приоритет на процесора:
    0 19 * * * usuario nice -n 19 /ruta/script.sh
  • Ограничаване на процесора до 50%:
    0 19 * * * usuario cpulimit -l 50 /ruta/script.sh

Използване на Crontab за рутинни задачи: архивиране, почистване и наблюдение

Едно от големите предимства на Cron е, че ви позволява да автоматизирайте „поддръжката“ на вашата машина почти без усилие, подобрявайки производителността в средносрочен план и спестявайки време.

Много типична употреба е периодично почиствайте временни файлове, кешове и празни директорииС помощта на скрипт, който изтрива стари или празни файлове в определени пътища, можете да освободите място и да намалите фрагментацията на файловата система.

Друг полезен модел е планиране на актуализации на системата и приложенията извън пиковите часове. Например, нощна работа, която стартира подходяща актуализация и подходяща надстройка (или еквивалентът във вашата дистрибуция) позволява системата да бъде актуална, без да прекъсва ежедневната работа.

Можете също така да автоматизирате затваряне на приложения, които са били неактивни твърде дългоосвобождаване на памет за други процеси. В настолни среди или среди за сървъри на приложения това може да има съществено значение.

И, разбира се, Cron е перфектен за скриптове за наблюдение и регистриранеРедовно записвайте данни за процесора, RAM паметта, използването на диска, мрежовата латентност и др., съхранявайте ги в лог файлове и след това анализирайте тенденциите, за да откриете пречки, преди те да се превърнат в сериозни инциденти.

Недостатъци и ограничения на Cron и Crontab

Въпреки че Cron е изключително мощен инструмент, той не е идеалното решение за всичко. Той има Ограничения, които си струва да знаете за да не го изтласкваме отвъд това, което предлага.

От едната страна е кривата на обучениеАко идвате от по-графични среди или системи като Windows, в началото може да е плашещо да пишете cron изрази на ръка и да работите без визуален интерфейс.

От друга страна, Cron е тясно свързан с екосистемата на Unix/Linux. Наученото ще бъде полезно на много сървъри и подобни системи, но Няма да можете да го използвате в сегашния му вид на Windows или macOS. (което си има свои собствени механизми).

Относно сигурността, ако Конфигурационните файлове на cron не са добре защитениТе могат да бъдат входна точка за злонамерени изпълнения. Позволяването на който и да е потребител да програмира неща без контрол отваря вратата към проблеми.

Освен това, Cron Не е идеален за много сложни задачи или задачи с много зависимости.Не обработва потока от грешки по усъвършенстван начин, не може да опита повторно с условна логика и не се интегрира директно с разпределени системи. За тази цел има по-сложни планировчици или собствени таймери на systemd.

Трябва също да имате предвид това crontab предлага точност само до една минутаАко имате нужда от нещо, което се изпълнява няколко пъти в секунда или на интервали по-малки от една минута, ще трябва да използвате други инструменти или програмни цикли в самия скрипт.

Алтернативи на Cron и Crontab: Anacron, Fcron, hcron, Mcron и други

В някои сценарии Cron не е идеален. Например, ако имате лаптоп или сървър, който не е винаги включен, Задачите, планирани за определено време, могат да бъдат „загубени“ ако оборудването е изключено по това време.

За покриване на такива случаи има алтернативи, като например Анакрон, който е предназначен за изпълнение на периодични задачи без да е необходимо машината да е постоянно включенаАко компютърът е бил изключен, когато е трябвало да се изпълни задача, Anacron ще го стартира възможно най-скоро след стартирането.

Fcron Това е друга интересна опция. Не изисква системата да е постоянно активна; може да работи с конкретни дати и часовеи предлага по-голяма гъвкавост, но с цената на изискване за ръчна инсталация в много дистрибуции.

hcron Това отива още една крачка напред, позволявайки използването на Етикети за организиране на задачи, управление на машинни мрежи и подобряване на безопасносттаНе е толкова популярен, но може да се впише добре в среди, където е желателно централизирано администриране.

Маккон (базиран на Guile) се различава по това, че разчита на цялостен език за програмиране, за да дефинира планирането на задачи, което му дава огромна сила, когато става въпрос за предефиниране на задачи, създаване на зависимости и обработка на сложна логика.

В Windows вместо това се използват решения като Cron. WinCron, VisualCron или Advanced Task Schedulerкоито предоставят интуитивни графични интерфейси и сравними функционалности, макар и интегрирани с екосистемата на Microsoft.

Cron и Crontab в бизнес среда

В компании от всякакъв мащаб, Cron и Crontab са част от „лепилото“, което поддържа системите работещи. Те позволяват автоматизиране на повтарящи се и критични процеси без постоянна човешка намеса, намалявайки риска от повреди и освобождавайки време на администраторите.

Сред най-често срещаните бизнес приложения са Планирани архиви, актуализации на софтуера, генериране на периодични отчети, задачи за поддръжка на базата данни и почистване на регистрационни файловеБлагодарение на детайлността на синтаксиса, можете да прецизирате кога се извършват действия, за да минимизирате въздействието.

Освен това, тези автоматизации имат пряко въздействие върху ефективност и производителностСлужителите не е нужно да помнят да стартират рутинни процеси, човешките грешки са намалени, а прозорците с ниско натоварване се използват по-добре за извършване на тежки операции.

Въпреки това, в бизнес среда е препоръчително Документирайте старателно всички планирани задачи, поддържайте резервни копия на crontab файловете и периодично проверявайте дали дефинираното все още има смисъл.С течение на времето е лесно да се натрупат остарели задачи, които продължават да консумират ресурси, без да допринасят с нищо.

В крайна сметка Cron и Crontab се превръщат в един вид „автоматичен график“ на систематаАко се използват разумно, те стават незаменими както в скромни сървъри, така и в големи инфраструктури с много машини и ви позволяват да поддържате солидна основа, върху която да изградите други, по-модерни инструменти за оркестрация или мониторинг.

В светлината на всичко гореизложено е ясно, че Планирането на задачи в Linux с Crontab остава един от най-простите и мощни начини за автоматизиране на вашата система.С няколко добре написани реда можете да се справяте с архивиране, почистване, актуализации, наблюдение и бизнес процеси, без да докосвате бутон, стига да спазвате ограниченията му, да управлявате разрешенията, да контролирате средата и разумно да планирате въздействието върху производителността и сигурността.

автоматично архивиране на външни устройства
Свързана статия:
Автоматично архивиране: Защитете данните си на външни устройства