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

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

Като начало, малко за това как работи по принцип.

Когато системата се стартира, стартира демонът cron. Може да се контролира (спиране / стартиране / установяване на състоянието) с командата: sudo service cron (спиране / стартиране / състояние). Но това е рядко, когато е необходимо.

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

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

Какво щеше настройте cron за обикновен потребител е достатъчно да напишете:

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

sudo crontab -u потребител -e

На мястото на потребителя пишем желания потребител, например root.
При първото стартиране ще има въпрос относно редактора ... Харесва ми nano. Той е прост и работи без графичен интерфейс.


Синтаксисът на задачите е много прост. Помислете за пример от екранната снимка на стартиране на кукувица:

0 * / 1 * * * / home / zegi / bin / kuku

В проблема има 2 основни полета: 0 * / 1 * * * - показва времето, когато командата ще бъде задействана. И / home / zegi / bin / kuku е пътят към скрипта, където са описани командите.

Не би трябвало да има проблеми с адреса на скрипта (zegi е потребителското име ... не забравяйте да поставите своя). Но е необходимо да се обясни как да се зададе времето на короната за изпълнение на скрипта.

Общо имаме 5 клетки за въвеждане, които са разделени с интервал.
1 - минути (числа от 0 до 59)
2 часа (от 0 до 23)
3 - ден от месеца (от 1 до 31)
4 - месец в годината (от 1 до 12 ... например февруари е 2)
5 - ден от седмицата (от 1 до 7. Западна седмица се използва, когато началото е неделя, т.е. слънце-1, понеделник-2, VT-3, сряда-4, четвъртък-петък, петък-6, събота- 7).

Всяка клетка трябва да бъде попълнена. Ако имате нужда командата да се изпълнява всеки месец, задайте * в 4-то поле. Същото се отнася и за останалите полета.

Да се \u200b\u200bвърнем към примера с кукувица, където скриптът се задейства всеки час. За задаване на честотата се използва / ... Например, ако искате задачата да се изпълнява на всеки 5 минути, в понеделник, тогава ние задаваме:

Ако искате задачата да се изпълнява на всеки час, ще трябва да зададете определена минута. Ако оставите звездичката (* * / 1 * * *), тогава kronor ще изпълнява всяка минута - тъй като условията са изпълнени: той провери всичките 5 клетки и стойността им съответства на текущото време (минути - няма значение. Часове - на всеки час, а не само определени ).
Винаги трябва да има звездичка преди наклонената черта. Например няма да работи за планиране на изпълнение на всяка минута, започвайки от 30-ти, като въведете 30/1.

Ако искате задачата да се изпълнява не циклично, а няколко пъти, тогава стойностите се записват разделени със запетаи.
Например трябва да изпълните задача в делнични дни в 12 ч. И 18 ч. Тогава ще изглежда така:

* 12,18 * * 2,3,4,5,6

Когато приключите с редактирането на задачи, не забравяйте да запазите промените (Ctrl + O\u003e enter) и след това можете да излезете (Ctrl + x).

Cron трябва да уведоми, че се е появила нова задача и е готов да я изпълни, като напише: "crontab: инсталиране на нов crontab".

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

И в крайна сметка себе си кукувица сценарийтази кукувица на всеки час:

#! / bin / bash
h \u003d `дата +% l`
докато [$ h -gt 0]
направете
възпроизвеждане ~ / kukushka.wav
h \u003d $ [$ h-1]
Свършен

Можете да изтеглите звука с кукувица с командата:

wget http://dl.dropbox.com/u/24844052/tuksik/kukushka.wav

Играта е включена в пакета sox. В ubuntu може да се инсталира с командата.

MIN HOUR DOM MON DOW CMD

Таблица: Полета Crontab и валидни диапазони (Синтаксис на Linux Crontab)

1. График на задачи за точно определено време

Основното използване на cron е да изпълнява задачи в точно определено време, както е показано по-долу. Това ще изпълни скрипта за пълно архивиране на 10 юни в 8:30 сутринта.

Моля, обърнете внимание, че полето за време използва 24-часов формат, така че 8 AM е 8, 20 PM е 20 часа.

30 08 10 06 * / начало / разработчик / пълно архивиране

  • 30 - 30-та минута
  • 08 - 08 ч
  • 10 - 10-ти ден
  • * - Всеки ден от седмицата

2. Планирайте задачи за по-често изпълнение (например два пъти на ден)

Следният скрипт използва допълнително архивиране два пъти на ден всеки ден. Този пример изпълнява инкрементално архивиране в 11:00 и 16:00 всеки ден. Стойностите, разделени със запетая в полето, показват, че командата трябва да се изпълнява във всеки определен момент.

00 11.16 * * * / home / developer / bin / incremental-backup

00 - 0-та минута (началото на часа) 11, 16 - 11 и 16 часа * - всеки ден * - всеки месец * - всеки ден от седмицата

3. График на работа през определен интервал от време (например само в делнични дни)

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

Cron рутина за всеки ден по време на работното време

Този пример проверява състоянието на базата данни всеки ден (включително почивните дни) по време на работното време от 9:00 до 18:00 часа.

00 09-18 * * * / home / developer / bin / check-db-status

00 - 0-та минута (началото на часа) 09-18 - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 (часа) * - всеки ден * - всеки месец * - всеки ден от седмицата

Cron рутина за всеки работен ден по време на работното време

Този пример проверява състоянието на базата данни всеки работен ден (с изключение на събота и неделя) от 9 до 18 часа.

00 09-18 * * 1-5 / home / ramesh / bin / check-db-status

00 - 0-та минута (началото на часа) 09-18 - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 (часа) * - всеки ден * - всеки месец 1-5 - понеделник, Вторник, сряда, четвъртък и петък (всяка седмица)

4. Как да видя записите в Crontab?

Вижте текущите файлове на Crontab на потребителя.

За да видите вашите crontab-l файлове от вашия Unix акаунт, направете следното.

[имейл защитен]$ crontab -l @yearly / home / разработчик / годишна поддръжка * / 10 * * * * / home / developer / check-disk-space

Преглед на основните записи на crontab

Влезте като потребител на root (su - root) и стартирайте crontab-l, както е показано по-долу.

[имейл защитен]# crontab -l няма crontab за корен

За да видите файловете на други потребители, влезте като root и използвайте -u (потребителско име) -l, както е показано по-долу.

[имейл защитен]# crontab -u потребителско име -l @monthly / home / потребителско име / месечно-архивиране 00 09-18 * * * / home / потребителско име / check-db-status

5. Как да редактирам записи в crontab?

Редактиране на текущи потребителски cron записи.

За да редактирате записи, използвайте cronab -e, както е показано по-долу. По подразбиране текущият crontab на потребителя ще бъде редактиран.

[имейл защитен]$ crontab -e @yearly / home / developer / centos / bin / year-maintenance * / 10 * * * * / home / developer / debian / bin / check-disk-space ~ "/tmp/crontab.XXXXyjWkHw" 2L, 83С

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

~ "crontab.XXXXyjWkHw" 2L, 83C написан crontab: инсталиране на нов crontab

Редактиране на основните записи в crontab

Влезте като потребител на root (su - root) и направете crontab -e, както е показано по-долу.

[имейл защитен]# crontab -e

Редактиране на записи на crontab на друг потребител

За да редактирате crontab записа на друг потребител на Linux, влезте като root и използвайте -u (потребителско име) –e, както е показано по-долу.

[имейл защитен]# crontab -u потребителско име -e @monthly / home / потребителско име / fedora / bin / ежемесечно архивиране 00 09-18 * * * / home / потребителско име / ubuntu / bin / check-db-status ~ ~ ~ "/ tmp / crontab .XXXXyjWkHw "2L, 83C

6. Изпълнение на Cron всяка минута

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

Баш * * * * * CMD

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

* / 5 в полето минути означава на всеки 5 минути. Посочването на 0-10 / 2 в полето за минути означава на всеки 2 минути през първите 10 минути. По този начин тази конвенция може да се използва във всичките 4 области.

7. Изпълнявайте фонови задачи на Cron на всеки 10 минути

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

* / 10 * * * * / home / ramesh / check-disk-space

Тази задача изпълнява зададената команда за проверка на диск на всеки 10 минути през годината. Въпреки това може да се наложи да проверявате само по време на работното време или обратно. Примерите по-горе показват как да направите това.

Вместо да посочваме стойности в 5 полета, можем да ги посочим с помощта на ключова дума, както е показано по-долу.

Има специални условия, когато вместо 5 полета можете да използвате @, последвано от ключовата дума - като рестартиране, полунощ, годишно, почасово.

Специални ключови думи Cron и тяхното значение

8. График за първата минута на всяка година, като използвате @yearly

Ако искате задачата cron да се изпълнява в първите минути на всяка година, можете да използвате ключовата дума @yearly, както е показано по-долу. В стека системата ще извършва годишна поддръжка, използвайки годишния скрипт за поддръжка в 00:00 часа на 1 януари всяка година.

@yearly / home / developer / red-hat / bin / ежегодна поддръжка

9. Изпълнявайте задачи всеки месец, използвайки ключовата дума @monthly

Подобно е на @yearly по-горе. Но командата се изпълнява ежемесечно. Екипът ще направи резервно копие в 00:00 на първия ден на всеки месец.

@monthly / home / ramesh / suse / bin / tape-backup

10. Изпълнявайте задачи всеки ден, като използвате @daily

Използването на ключовата дума @daily ще генерира дневник за почистване всеки ден в 00:00 всеки ден.

@daily / home / developer / arch-linux / bin / cleanup-logs "денят започна"

11. Как да изпълнявам командата на Linux след всяко рестартиране с помощта на @reboot?

Използването на ключовата дума @reboot ще изпълни посочената команда всеки път, когато системата се стартира.

@reboot CMD

13. 12. Как мога да деактивирам / пренасоча изходящата поща на Crontab, използвайки ключовата дума MAIL?

По подразбиране crontab изпраща изходни задачи на потребителя, който я е инсталирал. Ако искате да ги пренасочите към друг потребител, добавете или актуализирайте променливата MAIL в crontab, както е показано по-долу.

[имейл защитен]$ crontab -l MAIL \u003d "разработчик" @yearly / home / developer / ежегодна поддръжка * / 10 * * * * / home / developer / check-disk-space

Ако искате да предотвратите изобщо изпращане на поща, т.е.престанете да изпращате изходните crontab файлове, добавете или актуализирайте променливата MAIL в crontab, както е показано по-долу.

13. Как да изпълнявам Linux Cron задачи всяка секунда с помощта на Crontab

Не можете да настроите cron да се изпълнява всяка секунда. Защото най-малката единица за изпълнение на cron е минута. В нормален сценарий няма нужда да изпълнявате cron изпълнение всяка секунда.

14. Посочване на променлива PATH в Crontab

Във всички горни примери сме посочили абсолютния път на Linux команда или скрипт на обвивката, които трябва да бъдат изпълнени.

Например, вместо да посочите / home / developer / tape-backup, ако искате да посочите само backup-a на лентата, добавете пътя / home / developer към вашия PATH в crontab, както е показано по-долу.

[имейл защитен]$ crontab -l PATH \u003d / bin: / sbin: / usr / bin: / usr / sbin: / home / developer @yearly year-maintenance * / 10 * * * * check-disk-space

15. Инсталиране на Crontab от Cron файл

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

Забележка: Във вашия crontab ще бъде създаден файл cron-file.txt, който ще премахне старите записи на cron. Така че, моля, бъдете внимателни, когато зареждате cron записи от cron-file.txt:

[имейл защитен]$ crontab -l няма crontab за разработчик $ cat cron-file.txt @yearly / home / developer / year-maintenance * / 10 * * * * / home / developer / check-disk-space [имейл защитен]$ crontab cron-file.txt [имейл защитен]$ crontab -l @yearly / home / разработчик / годишна поддръжка * / 10 * * * * / home / developer / check-disk-space

Оригинал: Използване на cron планировчик на Linux системи
Автор: Rares Aioanei
Дата на публикуване: 29 септември 2011 г.
Превод: А. Кривошей
Дата на превода: ноември 2011 г.

1. Въведение

Ако вече имате известен опит с системната администрация на Linux, трябва да знаете какво е cron и за какво служи. Ако тепърва започвате да работите с Linux, тогава тези знания ще ви бъдат полезни. Дори ако вече сте научили как да използвате cron, тази статия ще ви помогне да разберете своите знания.
Името cron идва от Кронос, древногръцката дума за времето. И това е добре подбрано име, тъй като основната цел на cron е да помогне за планирането на различните задачи, които системата трябва да изпълнява в даден момент. Ако сте използвали Windows, вероятно е трябвало да се впуснете в помощната програма Scheduled Tasks. Като цяло целта на програмите е подобна, но изпълнението е различно. Cron е предназначен за сериозни задачи за системно администриране и е по-гъвкав. Архивирането е пример за реална задача. Ще ви хареса ли ръчно архивиране на данни на няколкостотин машини? Мисля че не. Просто пишете прост скрипт с помощта на rsync, планирате да се изпълнява, казвате ежедневно и забравяте за него. Всичко, което е необходимо в бъдеще, е да проверявате дневниците от време на време. Някои дори използват cron, за да им напомнят за важни лични събития като рождени дни. Но cron е просто демон, който стартира заданията, които сте посочили. Има ли помощна програма, която да ви помогне да редактирате / добавите / премахнете тези задачи? Разбира се, че е и се нарича crontab (от таблицата cron). Ние обаче ще продължим последователно и ще започнем с инсталацията.

2. Инсталиране на cron

Повечето дистрибуции използват Vixie Cron и няколко други производни като изпълнение на cron по подразбиране, което ще разгледаме в тази статия. Също така, почти всички дистрибуции вече имат предварително инсталиран cron, тъй като той е много важна част от системата Linux. Въпреки че обикновеният потребител обикновено никога не взаимодейства директно с него, системата и много приложения използват cron (периодичното актуализиране на базата данни на man страницата е добър пример). Забележителното изключение е Gentoo, където трябва ръчно да инсталирате vixie-cron и да го добавите към нивото на изпълнение по подразбиране. На Arch, Debian, Slackware, Ubuntu, Fedora и OpenSUSE cron се инсталира по подразбиране и автоматично стартира при зареждане. Надяваме се да изучите страниците на cron и crontab, тъй като много дистрибуции използват своите закърпени версии, за да интегрират по-добре програмата за конкретна дистрибуция. Следователно има възможност функция, която е достъпна например в Gentoo, да не е налична в Slackware. Във всеки случай няма нищо по-добро от четенето на човешки страници, особено ако се занимавате с нова програма, която възнамерявате да използвате достатъчно често.

3. Използване на cron

Първо, трябва да се уверим, че cron работи:

$ ps faux | grep cron

Ако в изхода няма нищо, проверете дали cron работи и го добавете към услугите по подразбиране, така че да стартира при следващото зареждане. Как да направите това зависи от разпространението. В системите на Debian командата трябва да изведе нещо подобно:

Корен 1424 0,0 0,0 22000 884? Ss 13:56 0:00 / usr / sbin / cron

Сега нека накараме cron да работи. Първо, трябва да помислим коя команда ще използваме. Изисква ли root права? Да предположим, че ще използваме crontab, за да добавим прост скрипт, който да се изпълнява на всеки пет минути като обикновен потребител.

3.1. Crontab

3.1.1. Пример

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

#! / bin / sh xterm -e "диалогов прозорец --msgbox" Тестване на cron ... "234 234" # Това е много прост пример, третирайте го както е

Нека да назовем файла crontest.sh и да го направим изпълним, тъй като всичко, което започва с cron, трябва да бъде изпълним:

$ chmod + x crontest.sh

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

E е за редактиране, -r за изтриване. Бъди много внимателен! Много системни администратори неволно са въвели -r вместо -e, особено след като тези ключове са разположени един до друг и са изтрили всички записи от crontab. Във всеки случай най-вероятно ще видите напълно коментиран файл (crontab използва # за коментари), който предоставя примери и описва целта на полетата за запис. Да, записът се състои от полета, последното от които посочва командата, която трябва да бъде изпълнена, а останалото - времето. Така че нашият crontab запис за скрипт, който се изпълнява на всеки пет минути, изглежда така:

$ * / 5 * * * * износ DISPLAY \u003d: 0 && /home/$user/crontest.sh

Трябва да експортираме променливата DISPLAY, така че xterm да не дава грешка като "DISPLAY не е зададена". Сега нека видим целта на всяко поле.

3.1.2. Полета на Crontab

Ако преди сте работили с заместващи символи, не бива да се натискате много, за да научите как да използвате звездичката в crontab: това означава, че всички възможни стойности на полетата са заменени с нея. Полетата по подразбиране в Linux (внимавайте, някои системи на Unix използват други внедрения на cron) посочват отляво надясно минута, час, ден от месеца, месец, ден от седмицата, година (по избор) и командата, която трябва да се изпълни. По този начин, ако искаме скриптът ни да се изпълнява на всеки пет минути, всеки час, всеки ден, всеки месец и всяка година, нашият запис трябва да изглежда така:

5 * * * * износ DISPLAY \u003d: 0 && /home/$user/crontest.sh

Призоваваме ви да внимавате с полето за деня от седмицата: във вашата страна първият ден от седмицата може да е понеделник, докато в други страни това може да е неделя. Ако работите в мултикултурна, мултинационална среда, трябва да сте наясно с културния и религиозен произход. Cron изпраща известия до потребителя, който притежава записа, до имейл адреса му по подразбиране ( [имейл защитен]$ hostname). Ако искате да промените имейл адреса си, просто добавете "MAILTO \u003d $ email_address" към вашия crontab. Ако искате да деактивирате тази функция, добавете "\u003e / dev / null 2\u003e & 1" в края на записа.
Сега, ако вече сте уморени от изскачащия прозорец на всеки пет минути, стартирайте crontab -e отново, за да изтриете или, по-просто, да коментирате записа. За да изброите съдържанието на crontab, просто използвайте опцията -l (списък).

3.2. Поглед към / и т.н. /

3.2.1. Cron скриптове

В предишните раздели решихме прости и тривиални проблеми, само за загряване, и сега ще се заемем със сериозен бизнес. Заглавието на този раздел се отнася до директории в / etc, които отговарят за периодичните задачи по поддръжката на системата. Например в директорията /etc/cron.weekly има скрипт man-db, който актуализира базата данни на man страницата. Всички такива скриптове са включени в дистрибуционния комплект и се изпълняват според файла / etc / crontab. Ето защо, ако искате да разберете работата им, най-добре е да разгледате съдържанието на този файл. Ще видите записи, подобни на тези, които направихме по-рано, но изпълнените команди ще бъдат различни. "run-parts" е малка помощна програма, предназначена да изпълнява всички скриптове в дадена директория.
Проницателният читател може да забележи, че в / etc / crontab има едно поле, което не видяхме, когато редактирахме crontab - полето „потребител“. Това е от съображения за сигурност. Ако въведете командата crontab -e като $ user, това означава, че всяка команда се изпълнява като $ user. Но тъй като / etc / crontab е общосистемен, трябва да зададете изрично потребителя, тъй като може да се наложи да изпълнявате определени скриптове или програми като потребител, различен от root, особено ако системният администратор е загрижен за сигурността и добавя потребители и групи към системата колкото е необходимо. Пример: всички привилегии на root не са необходими за архивиране, необходими са само разрешения за четене / запис в определени директории, така че администраторът създава група за архивиране и потребител на backupadmin с необходимите разрешения и изпълнява скриптове за архивиране всяка вечер, използвайки записа:

30 23 * * * backupadmin /home/backupadmin/nightlybkup.sh

Този запис изпълнява скрипта nightlybkup.sh всяка вечер в 23:30. Ако искаме да стартираме архивирането само от понеделник до петък, трябва да редактираме нашия запис:

30 23 * * 1-5 backupadmin /home/backupadmin/nightlybkup.sh

Ако искате да стартирате архивирането само в понеделник, сряда и петък, заменете "1-5" с "1,3,5". Когато знаете точно от какво се нуждаете, cron става ясен и лесен за използване.

4. Размисли относно безопасността

Има много ситуации, в които не искате потребител с достъп до вашата система да може да създава записи в crontab. Тук влизат в игра файловете /etc/cron.deny и /etc/cron.allow. Използването им е подобно на /etc/hosts.allow и / etc / hosts / deny, така че ако сте работили с тези файлове преди, ще се чувствате като у дома си. Тези два файла (cron.deny и cron.allow) по подразбиране не са в системата, поне в системата, по която работим, така че по подразбиране всеки има право да създава записи в crontab. Можете да проверите кои файлове, свързани с cron, във вашата директория / etc с командата:

$ ls / и т.н. | grep cron

Отново това важи за Linux, тъй като липсата на тези файлове в Solaris означава точно обратното и файловете се намират другаде. Cron.allow се проверява първо, така че обикновено въвеждаме "ALL" в cron.deny и след това добавяме потребителите, на които искаме да предоставим достъп в cron.allow.

5. Примери за използване на cron

Всяка минута:

* * * * * /usr/local/bin/check-disk-space.sh

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

По дни:

30 02 10 01.06,12 * /home/$user/bin/checkdrive.sh

Тази команда ще стартира скрипта checkdrive.sh в 02:30 на всеки 10 януари, юни и декември.

На всеки половин час:

00.30 * * * * /home/$user/backupdata.sh

Само през почивните дни:

* * * * 6.7 / usr / bin / уикенд

Два пъти дневно:

20 11.16 * * * / usr / sbin / command

Командата ще се изпълнява всеки ден в 11:20 и 16:20.

На всеки час в един определен ден:

01 * 2 05 * / sbin / system_command

На всеки 10 минути в продължение на пет работни дни (понеделник - петък):

* / 10 * * * 1-5 /usr/local/bin/check-disk-space.sh

Само в работно време:

00 09-17 * * 1-5 /usr/local/bin/check-disk-space.sh

Тази команда ще се изпълнява веднъж на ден от 9 до 17 часа.

0 0 1 1 * /usr/local/bin/check-disk-space.sh

Два пъти годишно в 12:00 и 24:00

0 0,12 1 * / 6 * /usr/local/bin/check-disk-space.sh

Тази команда ще се изпълнява два пъти годишно (на всеки 6 месеца) в 12:00 и 24:00.

Всеки трети четвъртък на всеки месец от 10:00 ч.:

0 10 15-21 * 4 /usr/local/bin/check-disk-space.sh

Всеки ден 20 минути след всеки четен час:

20 0-23 / 2 * * * /usr/local/bin/check-disk-space.sh

Тази команда ще се изпълнява всеки ден 20 минути след всеки четен час (0:20, 2:20 ... 22:20).

6. Заключение

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

Ако статията ви е харесала, споделете я с приятелите си:

Въведение

Като хостваме сайта, ние искаме да постигнем безпроблемна работа без нашето участие.

Това означава, че трябва да автоматизирате процесите и тук cron идва на помощ.

Крон - програма, демон за автоматично стартиране на програми и скриптове на сървъра в необходимото време.

Crontab в таблото за управление на Timeweb

Ако акаунтът ви е платен и не сте попаднали в нежелана поща, тогава раздел Crontab е наличен и функционален:

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

Crontab в контролния панел на Timeweb ще помогне на всеки потребител да автоматизира задачите си и да постигне желания резултат.

След основната информация ще говоря за нюансите, които е важно да се вземат предвид при работа с cron.

Нови задачи се създават в раздела Crontab. За да направите това, трябва да попълните полетата:

  • Име... Това е името на нашата задача.
  • Тип файл и път към файла... В зависимост от езика, на който е написан скриптът, изберете типа на файла и пътя към него.Ако скриптът се изпълнява в задача, която изисква променливи на уеб сървъра, стартирането му директно през интерпретатора на php води до грешки. Следователно в случая, когато използвате скрипт, който се стартира при стартиране през адресната лента на браузъра, трябва да изберете типа на файла „HTTP заявка“ и да посочите URL адреса на заявката по същия начин, както е посочен в адресната лента „your_site / path / to / script / script .php? параметър1 \u003d стойност1 & параметър2 \u003d стойност2 ".

Посочете едно администраторско поле в раздела Crontab, ако е необходимо. Тази пощенска кутия ще получава съобщения, ако се появи съобщение в конзолата при изпълнение на скрипта.

Нюанси

Малки нюанси, които трябва да имате предвид при работа с cron.

1. Cron работи, ако акаунтът е платен и няма ограничения.

Можете да проверите състоянието, като създадете файл с разширение php (например twtest.php) с код:

И чрез достъп до файла в браузъра.

Ще видите информация в браузъра:

uid \u003d 12345 (вход) gid \u003d 600 (клиенти) групи \u003d 600 (клиенти) - показва, че cron и поща са налични

uid \u003d 12345 (вход) gid \u003d 600 (клиенти) групи \u003d 601 (нови потребители), 600 (клиенти), 660 (спамери) - пишем в подкрепа

2. Файлът, който стартирате, трябва да има разрешения за четене и изпълнение (r + x).

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

Chmod 744 twtest.php

или във Файловия мениджър, Timeweb има инструкции за това:

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

CRON над SSH

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

Връзката ssh е описана подробно в Помощния център на Timeweb:

След като прочетете, трябва да намерите файла със скрипта, като се движите между директориите с командата cd. Когато намерите файла, въведете pwd и копирайте пътя (пример "/ home / c / cc123456 / public_html / test /")

Ако не знаете какви разрешения има файлът, въведете:

Chmod 744 име на файл

Когато се свързвате чрез ssh, можете да редактирате задачи с командата

Crontab -e

Първият път, когато сървърът ще ви помоли да изберете редактор:

Изберете редактор. За да промените по-късно, стартирайте "select-editor". 1. / bin / ed 2. / bin / nano<---- easiest 3. /usr/bin/mcedit 4. /usr/bin/vim.basic 5. /usr/bin/vim.tiny Choose 1-5 :

Системата сочи към прост нано редактор под номер 2. Ако не сте изчислили силите или случайно сте избрали vi, не се тревожете, натиснете Esc, след това въведете двоеточие q и натиснете enter.

За да смените редактора, въведете командата:

Изберете редактор

и изберете нано.

Заданията се пишат ред по ред. Пример:

1 2 3 4 5 / opt / php56 / bin / php /home/с/cc123456/public_html/twtest.php

Първите пет стойности са:

  • 1 минута - число от 0 до 59
  • 2 часа - число от 0 до 23
  • 3-то число на месеца - число от 1 до 31
  • 4-то число на месеца в годината - число от 1 до 12
  • 5-ти ден от седмицата - число от 0 до 7 (0-неделя, 1-понеделник, 2-вторник, 3-сряда, 4-четвъртък, 5-пет, 6-събота, 7-слънце)

За всеки параметър е възможно да зададете необходимия брой стойности, разделени със запетаи. Например, ако напишете 8.23 \u200b\u200bв полето "часа", тогава задачата ще бъде стартирана в 8 часа сутринта и в 23 часа вечерта. Можете да зададете интервала: 9-18 ще означава, че програмата ще стартира на всеки час от 9 до 18 часа включително. Символът "*" означава "всички възможни стойности". Например, посочването на "*" в полето "часа" би означавало "стартиране на всеки час". Символът „/“ се използва за обозначаване на допълнителна честота на задачата. Например „* / 3“ в полето „минути“ означава „на всеки три минути“.

"/ opt / php * / bin / php" където php * / \u003d php53 / php5.3 / php54 / php5.4 / php56 / php5.6 / php70 / php7.0 / php71 / php7.1 /

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

Нюанси

  1. Промените, направени в контролния панел в раздела "Crontab", ще изтрият промените в записите, направени чрез ssh!
  2. Ако са дефинирани както полетата "ден от месеца", така и "ден от седмицата", тогава такава задача ще бъде изпълнена на всеки определен ден от седмицата, независимо от деня на месеца. Например следната команда ще се изпълнява в 09:19 всяка сряда и всеки 7-ми от месеца, дори ако 7-мият не е същият като сряда.

19 9 7 * 3 / opt / php56 / bin / phpn /home/с/cc123456/public_html/twtest.php

Специални случаи

За да изпълняваме задачата по-често от веднъж в минута, използваме сън.

За да направите това, пишете на crontab:

* * * * * / opt / php56 / bin / php /home/k/konoplev/tmp/twtest.php; / кош / сън 30; / opt / php56 / bin / php /home/k/konoplev/tmp/twtest.php

за да стартирате файла на всеки 30 секунди.

Понякога, когато използвате cron run planner, не знаете колко време е необходимо за изпълнение на скрипта. За да се избегне двойното изпълнение на скрипта, се изисква да проверите за завършване на предишното изпълнение на скрипта.

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

Маестрото от инженерния отдел разказа как да реши проблема.

Първо, създайте sh скрипт във файла /home/c/cc123456/tmp/twtest.sh:

#! / bin / bash [имейл защитен] no_spaces \u003d `echo $ command | sed -e "s / \\ s / _ / g" -e "s | / | _ | g" ` pidfile \u003d / var / tmp / $ no_spaces.pid lockfile \u003d / var / tmp / $ no_spaces.lock ако [[-e $ pidfile]] тогава pid \u003d `cat $ pidfile 2\u003e / dev / null` ps h $ pid\u003e / dev / null 2\u003e / dev / null ако [[$? -eq 0]] след това излезте още 1 rm $ lockfile fi fi echo $$\u003e $ pidfile / usr / bin / flock -w 0 $ lockfile $ команда rm $ pidfile

В контролния панел в раздела crontab изберете типа "Изпълним двоичен файл".

В полето "Пълен път" напишете:

/home/c/cc123456/tmp/twtest.sh / opt / php56 / bin / php /home/c/cc123456/tmp/twtest.php

Където

  • /home/c/cc123456/tmp/twtest.sh - нашият тестов скрипт
  • / opt / php56 / bin / php - път към необходимия интерпретатор
  • /home/c/cc123456/tmp/twtest.php - пътят към нашия скрипт

Посочваме необходимото време за стартиране и измисляме име.

Заключение

Сега знаете как да работите с cron и да стартирате задачи автоматично. За повече информация относно cron вижте "man cron". Късмет!

В системата Linux автоматичното стартиране на задачите се извършва от демона на crond и не само системният администратор, но и потребителите могат да създават графици за автоматично стартиране на задачите.

Как работи crond

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

График на задачи

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

Формат на записите във файла crontab

Частта за дата и час се състои от пет цифрови полета, разделени с интервали и определящи времето, когато задачата ще започне:

За удобство на попълването на тези полета са въведени следните правила:

  • Можете да посочите стойности като числови диапазони. Например 1-3 в полето за часове означава 1,00, 2,00 и 3,00 сутринта, 2-4 в полето за деня на седмицата означава вторник, сряда или четвъртък.
  • Интервалите могат да се задават на стъпки, по-големи от един. Например, за да посочите всеки втори час, започвайки в полунощ, задайте интервала 0-23 със стъпка 2, разделена с наклонена черта: 0-23 / 2
  • Звездичка (*) показва пълния диапазон от стойности на полетата, от минимални до максимални. Например в полето на деня на месеца звездичка означава интервал 0-31, в полето на деня от седмицата - 0-7
  • Денят от седмицата или месеца може да бъде определен с първите три букви от неговото (английско) име

Примери за дата и час

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

0 1 * * * Изпълнявайте заданието всеки ден в 13:00 ч. 30 14 * * 0 Изпълнявайте заданието в неделя в 14:30 ч. 0 23-7 / 2,8 * * * Изпълнявайте заданието на всеки 2 часа от 23.00 до 7.00 и 8.00 0 12 * 1 понеделник Започнете задачата по обяд всеки понеделник през януари всяка година 0 12 2 февруари * Започнете задачата по обяд на втория февруари всяка година

Командно поле

Командното поле е отделено от полетата за дата и час с едно или повече интервали и се простира до края на реда. Командите се обработват от / bin / sh черупката.

Например, следното влизане в crontab призовава програмата / usr / sbin / backup да се изпълнява всеки ден в 1.00 ч .:

0 1 * * * / usr / sbin / backup

Някои команди (например поща) изискват въвеждане от stdin. Това се показва с помощта на знак за процент (%). Първият такъв знак обозначава началото на стандартния вход, всеки следващ - прекъсване на ред.

Редактиране на файла crontab

Файлът crontab се редактира с командата crontab -e. Възможни са два подхода:

  • създаване на нов файл с всички записи, които трябва да бъдат включени във файла crontab, и след това записването му на диск под това име с помощта на командата crontab;
  • директно редактиране на файла с помощта на командата crontab -e.

Запис от файл

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

0 1 * * * / usr / sbin / backup

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

~ $ crontab cronjobs

Съдържанието на файла cronjobs напълно ще замести съдържанието на файла crontab на потребителя. Използвайки този метод, всеки може да редактира своя crontab файл. Суперпотребителят има специално разрешение да редактира crontab файловете на други потребители. Редактирането на чужд файл се обозначава с флага -u. Например по команда:

~ # crontab -u oleg cronjobs

файлът cronjobs се записва като файл crontab на потребителя на oleg.

Редактиране на файла crontab директно

Командата crontab избягва многоетапната операция по създаване на отделен файл. Ако въведете командата crontab с опцията -e, можете директно да редактирате файла crontab.

По подразбиране командата crontab с опцията -e зарежда файла crontab в редактора. Редактор Vi - мощен, макар и сложен инструмент, популярен сред потребителите на енергия Unix... Някой, който предпочита различен редактор като Xedit, може да зададе променливата на средата EDITOR на подходяща стойност:

~ $ износ РЕДАКТОР \u003d xedit

След това въведете командата

води до отваряне на файла crontab в посочения редактор.

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

~ # crontab -u потребителско име -e

Преглед на файла crontab

За да видите съдържанието на файла crontab, въведете командата:

Суперпотребителят може да преглежда crontab файловете на други потребители:

~ # crontab -u потребителско име -l

Премахване на файла crontab

За да изтрие съдържанието на своя crontab файл, потребителят въвежда командата:

Суперпотребителят може да изтрива crontabs на други потребители.

Споделя това