Crontab в Linux – с примери и инструменти в реално време

Нека проучим crontab, неговите команди и различни операции, свързани с Crontab.

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

Съдържание

Произход

Crontab означава „cron таблица“. Думата cron е взета от гръцката дума Chronos, което означава време. Crontab е процес на системен демон, който автоматично ще изпълнява някои задачи и задания според планираното време.

  Как да настроите Firejail на Linux

Случаи на употреба

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

Използвайки cron, администраторът може да планира изпълнението на задание в определен час и ден.

Нека да видим как можем да настроим това.

Синтаксис на Crontab

За да изпълни списък с команди, помощната програма cron чете конфигурационните файлове. За да се интерпретират редовете в конфигурационните таблици на crontab, следва синтаксис на Crontab. Crontab има шест полета, като първите пет (1-5) полета определят датата и часа на изпълнение. Последното поле, т.е. 6-то поле, може да бъде потребителско име и/или задача /задание/команда/скрипт, които да бъдат изпълнени.

* * * * * USER_NAME COMMAND/SCRIPT-TO-EXECUTE

│ │ │ │ │
│ │ │ │ │
│ │ │ │ |_________ Ден от седмицата (0 – 6) (0 е неделя или използвайте имена)
│ │ │ |____________ Месец (1 – 12),* означава всеки месец
│ │ |______________ Ден от месеца (1 – 31),* означава всеки ден
│ |________________ Час (0 – 23),* означава всеки час
|__________________ Минута (0 – 59), * означава всяка минута

Бележки:

  • Звездичка
  • се използва за съвпадение на всички възможни стойности за поле. Например, звездичка, използвана в полето за час, би била еквивалентна на всеки час или звездичка в полето за месец би била еквивалентна на всеки месец.

потребителското име не е задължително (достъпно само ако е системният crontab файл)

Примери:

Нека разберем горния синтаксис с някои примери

0 5 * * * /scripts/job.sh

1. Планирайте cron да се изпълнява в 5 сутринта всеки ден

0 6,18 * * * /scripts/job.sh

2. Планирайте cron да се изпълнява два пъти на ден в 6 сутринта и 18 часа

* * * * * /scripts/job.sh

3. Планирайте cron да се изпълнява всяка минута

0 19 * * mon /scripts/job.sh

4. Планирайте cron да се изпълнява всеки понеделник в 19 часа.

*/10 * * * * /scripts/job.sh

5. Планирайте cron да се изпълнява на всеки 15 минути.

* * * feb,jun,oct * /script/job.sh

6. Планирайте cron за изпълнение в избрани месеци

25 7 4 3 * /home/script/backup.sh

7. Стартирайте шел скрипта /home/script/backup.sh на 4 март в 7:25 сутринта

8. Планирайте cron да се изпълнява на всеки 30 секунди

  • Тъй като нямаме контрол над секундите в Crontab, но можем да го постигнем чрез процеса в две стъпки по-долу.
* * * * * /home/scripts/script.sh
  • Нека първо планираме задача, която да се изпълнява всяка минута.
* * * * * sleep 30; /home/scripts/script.sh

Сега нека използваме командата за заспиване, за да поставим на пауза изпълнението за 30 секунди.

Горната задача ще спре изпълнението за 30 секунди и то ще се поднови отново.

Тип на конфигурационните файлове на Cron

  Как да играете игри на Nintendo DS на Linux с MelonDS

Има два типа конфигурационни файлове на Cron:

Системата UNIX/Linux Crontab

Това изисква root привилегия, защото обикновено се използва за системни услуги и критични задачи. Шестото поле (в горното описание на синтаксиса) е името на потребител, от който да се изпълнява командата. Той дава възможност на системния crontab да изпълнява команди като всеки потребител.

Потребителят Crontab

Потребителят може също да инсталира свои собствени cron задания, като използва командата crontab. Тук също шестото поле (в горното описание на синтаксиса) е командата за изпълнение и всички команди се изпълняват като потребител, който е създал crontab. Всеки потребител може да има свой собствен crontab файл и въпреки че това са файлове в /var/spool/cron/crontabs, те не са предназначени да бъдат редактирани директно. Трябва да използваме командата crontab за редактиране или настройка на нашите собствени cron задачи.

Как работи? Услугата cron (демон) работи във фонов режим и постоянно проверява (всяка минута) файла /etc/crontab и /etc/cron.*/ директориите. Той също така проверява директорията /var/spool/cron/. Командите се изпълняват от cron

когато полетата за минути, час и месец съвпадат с текущия час и поне едно от двудневните полета (ден от месеца или ден от седмицата) съвпада с текущия ден.

Основни команди

Изброяване на съществуващи Cron задачи

crontab -l

Можем да изброим всички задания на Cron, без да отваряме конфигурационния файл на crontab, използвайки командата по-долу

[[email protected] ~]# crontab -l
no crontab for pctechbg.net
[[email protected] ~]#

Ако няма съществуваща задача, тя ще върне изхода като

[[email protected] ~]# crontab -l
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
0 */1 * * * /home/account/scripts/updateAccountStatuses.sh
0 */1 * * * /home/account/scripts/reActivateAccountStatus.sh
[[email protected] ~]#

Ако потребителят вече е добавил някои от заданията, ще се покаже, както следва.

Cron таблицата е специфична за потребителя, което означава, че трябва да сте влезли с определен потребител, за да видите списъка с cron таблица.

Избройте Cron за конкретен потребител

За да изведете списък с планирани задачи на друг потребител, използвайте опция като -u (Потребител) и -l (Списък).

crontab -u друго_потребителско име -l

Пример: crontab -u pctechbg.net -l

Добавяне/промяна на записи в Crontab

  Как да организирате вашите списъци в Linux с Dynalist

За да редактирате записа в crontab, можем да използваме опцията -e, както е показано по-долу.

crontab -е

Горната команда ще отвори vi редактори, където указвате подробностите за заданието и запазвате файла. След като запазите, можете да проверите дали cron е конфигуриран или не с crontab -l.

Добавяне/промяна на записи в Crontab за конкретен потребител

crontab -u another_username -e

Можем да редактираме crontab за друг потребител, като използваме командата по-долу

Пример: crontab -u pctechbg.net -e

Премахнете записа на Crontab

Използвайте параметър -r с Crontab, за да премахнете пълни планирани задачи без потвърждение от crontab

crontab -r

crontab -i -r
[[email protected] ~]# crontab -i -r
crontab: really delete pctechbg.net's crontab?

Ако искате потвърждение, преди да изтриете насрочени задания, използвайте опцията -i с -r, която ще поиска потвърждение от потребителя, преди да изтриете crontab на потребителя.

Crontab Special String

Освен горния синтаксис, който обсъдихме, можем да използваме и осем специални низа, предоставени от Crontab. Това не само ще ни спести време, но и ще подобри четливостта.
Специален низ
Описание
@рестартиране
Стартирайте веднъж, след стартиране.
@годишно
Изпълнявайте веднъж годишно, т.е. 0 0 1 1 *
@годишно
Същото като @годишно
@месечно
Стартирайте веднъж месечно, т.е. 0 0 1 * *
@седмично
Изпълнявайте веднъж седмично, т.е. 0 0 * * 0
@ежедневно
Стартирайте веднъж на ден, т.е. 0 0 * * *
@полунощ
Същото като @daily
@почасово

Стартирайте веднъж на час, т.е. 0 * * * *

Crontab специални примери за низове

1. Crontab да планира задачи на годишна база

@годишно /scripts/greeting.sh

Можем да изпълним над едно за изпращане на поздрав за нова година. Ще се изпълнява в първата минута на всяка година.

2. Crontab за планиране на задачи за изпълнение на месечна база.

@monthly /scripts/cleanup.sh

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

По същия начин можем да използваме друг специален низ на Crontab за седмични, ежедневни и почасови цели.

Cron директория

  • Системният администратор може да използва график за cron за цялата система, който е в предварително зададената директория cron, както е показано по-долу
  • /etc/cron.d
  • /etc/cron.daily
  • /etc/cron.hourly
  • /etc/cron.monthly

/etc/cron.weekly

Примери в реално време на Crontab

Нека обсъдим някои от примерите в реално време, които системният администратор или ИТ специалистите обикновено използват.

Изтрийте празни файлове и директория

45 0 * * * pctechbg.net намиране /tmp -тип f -празно -изтриване

Горният cron израз ще намери празните файлове и директория от директорията /tmp и ще ги изтрие. Тази работа ще се изпълнява в 00:45 сутринта всеки ден. Трябва да споменем потребителското име, за да изпълним тази работа. В горния пример потребителят на pctechbg.net изпълнява операция на cron.

Изпълнявайте множество задачи с помощта на един cron

* * * * * /home/scripts/backup.sh; /home/scripts/scritp.sh

Множество задачи/задачи могат да бъдат разделени с помощта на точка и запетая (;) и могат да бъдат присвоени на един cron израз.

Инструменти за форматиране и тестване на Cron

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

Има няколко инструмента за форматиране на Cron, достъпни онлайн.

# 1. Cron Job Generator Cron генератор на задания

е много удобен за потребителя GUI, където можете да посочите минутите, дните и пътя на скрипта за генериране на crontab.

Нека вземем пример в реално време, където трябва да изпълнявам /home/processMonitor.sh на всеки 5 минути между понеделник и петък.

И така, получих долния синтаксис на Cron, който мога да поставя в моя crontab чрез изпълнение
crontab –е

0,5,10,15,20,25,30,35,40,45,50,55 * * * 1-5 /home/processMonitor.sh

# 2. Easycron Easycron

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

Не само това, но Easycron може да се използва и за постигане на други цели като стандартен израз на Cron, регистрационни файлове за изпълнение на задачи на Cron, известия по имейл, отделни регистрационни файлове за грешки и др.

# 3. Генератор на Crontab Crontab генератор

е друг удобен инструмент за генериране на crontab и с този инструмент можете също да добавите, ако искате да запазите изхода на cron във файла или да го изпратите на имейл.

# 4. Crontab Guru Кронтаб Гуру

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

В примера по-долу Job ще се изпълнява в 04:05, всеки ден, всеки месец и всяка седмица.

# 5. CRON тестер CRON тестер

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

За да направим това, можем да използваме този инструмент. Всичко, което трябва да направим, е да копираме и поставим нашия cron израз в полето за дефиниция на cron, след това да изберем броя на итерациите и да щракнете върху Тест, за да видите различните дати, на които ще се изпълнява.

Нека проверим един от нашите cron изрази 4 3 */2 * *, който трябва да се изпълнява в 03:04 (сутринта) на всеки два дни. Нека го проверим с cron tester.

Заключение Надявам се, че горното ще ви помогне да разберете по-добре Crontab и настройването на cron задания. Планирането на задачи чрез Cron е една от многото задачи, изпълнявани от Linux Admin. Ако се интересувате да научите умения за напреднали, вижте товакурс

.