Как да планирате задачи в Linux с Cron и Crontab

Как да планирате задачи в Linux с Cron и Crontab

Знаете ли, че Бегач на остриета е настроен през 2019 г. Това е след три години! Да не споменавам Обратно в бъдещето 2 , където пътуват във времето напред в 2015 г. Все пак ние нямаме летящи коли и няма репликанти сред нас (доколкото знам).





Лесно е да се чувствате разочаровани от съвременната технология, когато я сравняваме с измислени изображения на бъдещето. И все пак тези дни нашите телефони, компютри и дори къщи могат да правят невероятни неща. Възможността за автоматизиране на задачи е една от тях.





Всеки потребител на Linux може да се възползва от задачите за планиране, независимо дали са свързани със системата (като почистване на стари регистрационни файлове и актуализиране на пакети ) или обслужване на потребителя (проверка на имейл, изтегляне на подкасти ...). Потребителите на Windows имат Task Scheduler от Windows 95. Помощната програма, която върши същата работа в Linux, се нарича cron и тук ще обясним как да я използваме.





как да предотвратите прегряване на лаптопите

Какво е Cron?

Cron е системна услуга, която работи във фонов режим, проверява за планирани задачи и ги изпълнява, ако намери такива. Задачите - наричани още „cron jobs“ - са дефинирани в специални конфигурационни файлове (crontabs), които cron сканира всяка минута. Няколко версии на cron могат да бъдат намерени в различни дистрибуции на Linux. Например вилицата на codo на Fedora се нарича приятел , а има и такива fcron , bcron , и dcron . Някои имат допълнителни функции, докато други са по -фокусирани върху сигурността, но всички те се основават на една и съща идея.

Това ръководство е написано за vixie-cron, която е най-разпространената версия на cron и тази, която ще намерите в Ubuntu и нейните производни. Въпреки че повечето инструкции се отнасят и за други реализации на cron, може да има незначителни разлики, така че проверете техните ръководства, ако решите да превключите.



Какво е Crontab?

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

Всъщност във вашата система има няколко crontabs. Всеки потребител има свой собствен crontab, включително root (администратора). Потребителските crontabs се съхраняват в





/var/spool/cron/crontabs/

. The

crontab -l

командата ще изброява файла crontab за текущия потребител. Можете да проверите коренния crontab с





sudo crontab -l

.

Освен това има системния файл crontab

/etc/crontab

който се използва за общосистемни задачи. Обикновено те са под формата на изпълними скриптове, собственост на root, поставени в

/etc/cron.hourly/

,

/etc/cron.daily/

,

/etc/cron.weekly/

, и

/etc/cron.monthly/

папки, а при някои дистрибуции -

/etc/cron.d/

папка също. Най -общо казано, не е нужно да се занимавате с тези задачи, тъй като повечето от тях се създават автоматично от инсталирани приложения.

Как да планирате задачи с Cron

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

crontab -e

команда. За да редактирате root или crontabs на други потребители, изпълнете командата с администраторски права и добавете потребителското им име след опцията -u:

sudo crontab -u root -e
sudo crontab -u username -e

Файлът crontab има два раздела. Първият съдържа променливи на средата, които се настройват автоматично. Можете безопасно да промените променливите PATH, HOME и SHELL и да промените MAIL променливата.

Втората част на файла е действителният „график“ с планираните ви задачи. Всяка задача заема ред (ред) в таблицата, с колони, представляващи следните стойности:

За да планирате успешно задачи, трябва да знаете малко за синтаксиса на crontab:

  • Числата трябва да са цели числа (цели числа) и можете да използвате звездичката (*) във всяка от колоните като заместващ знак, което означава „всяка минута/ден/месец ...“.
  • В колоната „Ден на месеца“ внимавайте да не зададете дата, която да не се среща в месеца, посочен в колоната „Месец“ (например 30 -ти февруари).
  • Колоните „Месец“ и „Ден от седмицата“ приемат кратки имена съответно за месеци и дни и нечувствителни към регистъра.
  • В графата „Ден от седмицата“ и 0, и 7 означават неделя. Колоната „Час“ изисква формат „военно време“ (24 часа), но не можете да използвате числото 24-вместо това 0 означава 12 часа сутринта Това е така, защото стойностите за минута, час и ден от седмицата започват на 0 вместо на 1.
  • Секундите не се поддържат, така че не можете да планирате задача в определена секунда.

Това, което можете да направите, е да планирате включени интервали от време с тире (14-22 в „Часове“ ще изпълнява задачата непрекъснато от 14:00 до 22:00 часа) или да изпълнявате една задача няколко пъти, като дефинирате списък, разделен със запетая (1, 3,5 под „Ден от седмицата“ ще изпълнява задачата в понеделник, сряда и петък).

Междувременно стойностите на стъпките са представени с наклонена черта (/) и те показват размера на пропуските в рамките на диапазон; например 3-20/3 под „Часове“ ще изпълняват задачата на всеки три часа от 3 до 20 ч. Това е полезно, когато искате да повтаряте задачи на всеки X час, защото можете да комбинирате звездичка и стъпка (*/X). Можете да комбинирате диапазони със списъци и стъпки с диапазони, стига да използвате числа. С други думи, не се допускат комбинации като „jan-mar“ или „Tue, Fri-Sun“.

Като алтернатива, вместо да задавате стойност за всяка колона, можете просто да напишете @weekly, @yearly, @monthly, @daily или @hourly в началото на ред, последвано от команда. Така планирани, задачите ще се изпълняват на първия възможен екземпляр, така че @weekly ще се изпълнява в полунощ на първия ден от седмицата. Ако искате да изпълните задача веднага, когато системата (повторно) стартира, използвайте командата @reboot.

В този пример сме планирали архивиране всеки ден в 08:20 и 20:20. Тапетът се променя автоматично на всеки три дни в 19:00, а скриптът ще проверява за нови подкасти всеки понеделник в 10:20 и 20:20. Напомнянето за рожден ден е зададено за 25 март и се изпълнява на всеки 30 минути в рамките на посочения срок. И накрая, скриптът проверява имейла на всеки 15 минути от 8 до 20, но само в работни дни. Можете да организирате своя crontab с интервали и раздели между колони, но не и в тях (не поставяйте интервали между запетаи, тирета и наклонени черти).

Ако всичко това звучи твърде сложно, не се притеснявайте - винаги можете да разчитате на интернет. Инструменти като Генератор Crontab , Crontab.guru , и Corntab ви помагат да създавате cron работни места, без да знаете никакъв синтаксис на crontab. Те ви показват кога заданието ще се изпълнява следващо и предоставят шаблони за често използвани изрази. Crontab.guru е най-добрият от групата, защото ви позволява да тествате синтаксиса на crontab на живо, така че веднага можете да видите как промените ви ще повлияят на графика.

Как да проверите дали Cron Jobs са изпълнени

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

Cron има вградена функция за уведомяване по имейл, но това изисква настройка поне на обикновен локален пощенски сървър. Не много домашни потребители са готови да конфигурират това и не много дистрибуции го предоставят по подразбиране (например Ubuntu не го прави). Най -бързият начин да проверите в cron е да сканирате системния регистър с тази команда:

cat /var/log/syslog | grep -i cron

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

/var/log/

, така че погледнете там, ако тази команда не успее да даде полезни резултати.

Ако трябва да запишете изхода на определена задача на cron, можете да го пренасочите към файл. Посочете пътя и името на файла в последната колона на crontab след командата, която искате да изпълните:

30 * * * * /usr/bin/yourcommand > /home/username/logfile.txt

Използването на единичен символ> ще презаписва файла всеки път, когато командата се изпълни. За да избегнете това, използвайте >> вместо това - той добавя изхода към съществуващия файл.

Ами ако Cron не работи?

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

Работи ли услугата cron?

Както знаете, демонът на cron трябва да работи във фонов режим. Уверете се, че това наистина е така. Услугата се нарича crond или просто cron.

За дистрибуции, използващи systemd:

systemctl status cron

За дистрибуции, използващи Upstart:

service cron status

Ако вашата дистрибуция използва „стария“ подход на System V init, избройте всички услуги с:

как да създадете модове за minecraft
initctl list

и вижте дали cron е в списъка.

Разрешено ли е дори да имате файл crontab?

Провери своя

/etc

папка за имена на файлове

cron.allow

и

cron.deny

. В Ubuntu нито едното, нито другото не трябва да съществува, което означава, че на всички потребители е разрешено да управляват задания на cron. Ако обаче има а

тъмната тема на File Explorer не работи
cron.allow

файл, той трябва да съдържа вашето потребителско име. Обратно, ако

cron.deny

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

cron.deny

празен файл означава, че само root и потребители, изброени в

cron.allow

може да има crontab файлове.

Вашите променливи правилно ли са настроени?

Crontab автоматично задава вашата променлива SHELL на

/bin/sh

. Ако обаче вашата черупка по избор е риба или bash, трябва да промените променливата SHELL

. По същия начин променливата PATH съдържа само няколко директории по подразбиране. Тук crontab търси Linux команди. Ако работата ви с cron не се изпълнява, това може да е така, защото crontab не „вижда“ командата, която сте използвали. За да избегнете това, добавете директории, съдържащи командите, към променливата PATH, разделени с двоеточия:

PATH =/opt/myapp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Ако не искате да редактирате това във вашия crontab, можете да дефинирате тези променливи в скрипта, който искате да изпълните като cron работа.

Форматирането на crontab правилно ли е?

Синтаксисът на Crontab не е точно плавно. Дори и да го проверите с онлайн инструменти, споменати по -горе, малка грешка все още може да попречи на cron да изпълнява заданията ви. Внимавайте да:

  • добавете празен ред в края на файла crontab
  • избягвайте знака % с обратна наклонена черта, ако вашата команда го включва
  • пишете коментари като отделни редове, започващи с #. Не пишете коментари на същия ред като променливите на средата или до командите на cron job.

Наистина ли трябва да използвате терминала?

Абсолютно не. Потребителите на KDE могат да планират задания за cron с KCron, който е достъпен от Системни настройки> Планировчик на задачи модул. С ясен интерфейс, който ви позволява да избирате и ощипвате всичко само с няколко щраквания на мишката, KCron е удоволствие да се използва.

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

Трябва да сте наясно с други решения, като например Crontab-UI и Микрон . Те са по-подходящи за потребители, които управляват множество машини и задания за cron, а една от най-готините им функции е уеб базираният интерфейс.

Има ли алтернативи на Cron?

Докато cron е почти стандартният планировчик на задачи за Linux, той със сигурност не е единственият. The по команда е идеален за бързи, еднократни задачи, които могат да бъдат планирани директно от командния ред, без специални конфигурационни файлове. Ако имате нужда от повече, има GNUbatch , който въвежда понятието за зависимост. С GNUbatch можете да зададете специфични условия за всяка работа или да направите планирана задача в зависимост от предишна. Нещо подобно може да се постигне с системни таймери . Макар и по -малко практични за конфигуриране от cron, системните таймери могат да запомнят дали дадена задача е пропуснала графика си, докато компютърът е бил изключен, и да я стартират следващия път, когато е включена.

Това е нещо, което cron не може да направи сам. Като такъв, той е подходящ за сървъри и компютри, които постоянно работят, но няма да изпълнява задача, която е била насрочена, докато компютърът е бил изключен. Това е където анакрон влиза в игра. Технически това не е „алтернатива“ или заместител на cron. Вместо това, anacron допълва cron и трябва да се използва заедно с него, което е случаят с много дистрибуции на Linux, включително Ubuntu и базирани на Ubuntu продукти. Anacron регистрира, когато дадена задача е изпълнена за последно, и проверява дали има пропуснати екземпляри, докато системата е изключена. Той ще ги стартира, когато отново включите компютъра, но всяка задача може да бъде изпълнена само веднъж на ден.

Някои версии на cron, като fcron, предлагат функциите на anacron по подразбиране. Разширените потребители може да искат да разгледат Hcron или SuperCron , които носят много подобрения в основните функции на cron, но също така са донякъде предизвикателни за управление.

Ами ти? Как организирате цифровите си задачи? Какви задачи планирате в Linux? Споделете вашите истории и съвети за използване на cron в коментарите.

Кредит на изображението: табло за график от Гонсало Арагон чрез Shutterstock

Дял Дял Туит електронна поща 12 видео сайтове, които са по -добри от YouTube

Ето някои алтернативни видео сайтове на YouTube. Всеки от тях заема различна ниша, но си струва да добавите към отметките си.

Прочетете Напред
Свързани теми
  • Linux
  • Linux
За автора Ивана Айседора Девчич(24 статии са публикувани)

Ивана Исадора е писателка и преводачка на свободна практика, любителка на Linux и фенди KDE. Тя поддържа и популяризира безплатен софтуер с отворен код и винаги търси свежи, иновативни приложения. Разберете как да се свържете тук .

Още от Ивана Исадора Девчич

Абонирайте се за нашия бюлетин

Присъединете се към нашия бюлетин за технически съвети, рецензии, безплатни електронни книги и изключителни оферти!

Щракнете тук, за да се абонирате
Категория Linux