Cron & crontab, обяснено

Лукаин той публикува Преди време отличен урок за cron и crontab което мисля, че си струва да споделите. Cron е нещо като еквивалент на Scheduled Tasks в Windows, само че се обработва от терминала. Тези, които предпочитат визуален интерфейс, за да постигнат същата цел, могат да видят това друг елемент.

Какво е cron?

Името cron идва от гръцкото chronos, което означава „време“. В операционната система Unix cron е обикновен мениджър на фонови процеси (демон), който изпълнява процеси или скриптове на равни интервали (например всяка минута, ден, седмица или месец). Процесите, които трябва да бъдат изпълнени, и времето, в което те трябва да бъдат изпълнени, са посочени във файла crontab.

Комо произведения

Демонът на cron започва от /etc/rc.d/ o /etc/init.d в зависимост от разпределението. Cron работи във фонов режим, проверява таблицата на задачите crontab всяка минута / И т.н. / кронтаб о EN / var / макара / cron в търсене на задачи, които трябва да бъдат изпълнени. Като потребител можем да добавяме команди или скриптове със задачи към cron, за да автоматизираме някои процеси. Това е полезно например за автоматизиране на актуализацията на система или добра система за архивиране.

Свързана статия:
Урок: Инсталирайте пакетите .tar.gz и .tar.bz2

Какво представлява Crontab?

Crontab е прост текстов файл, който съхранява списък с команди, които трябва да бъдат изпълнени в момент, определен от потребителя. Crontab ще провери датата и часа, когато трябва да се изпълни скриптът или командата, разрешенията за изпълнение и ще го направи във фонов режим. Всеки потребител може да има свой собствен crontab файл, всъщност / И т.н. / кронтаб приема се, че това е файлът crontab на root потребителя, когато нормалните потребители (и дори root) искат да генерират свой собствен crontab файл, тогава ще използваме командата crontab.

Crontab е най-лесният начин за управление на cron задачи в многопотребителски системи, като обикновен потребител на системата или като потребител на root.

Използване на crontab

Започваме с прост пример.

Ще автоматизираме актуализацията на дадена система, за да премахнем досадното "Винаги трябва да актуализирам и това не ми харесва!"

как да
Свързана статия:
Команди за познаване на системата (идентифициране на хардуер и някои софтуерни конфигурации)

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

#! / bin / bash # пример за актуализация на скрипт # изберете вашата дистрибуция # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

Премахнете # от вашата дистрибуционна линия. В случай, че е Ubuntu / Debian, той започва с apt-get.

Записваме скрипта като update.sh (напр. Скриптове в дома ви). Променяме разрешенията за изпълнение на споменатия скрипт с:

chmod a + x ~ / scripts / update.sh

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

Добавете задачи към crontab

Изпълняваме изданието на crontab с crontab -e, в някои дистрибуции (като Ubuntu) ни дава възможност да изберем текстовия редактор, който искаме, останалото ни остава с vi. Файлът crontab ще изглежда по подобен начин.

# mh dom mon dow потребителска команда

когато:

  • m съответства на минутата, в която ще бъде изпълнен скриптът, стойността варира от 0 до 59
  • h точното време, обработва се 24-часовият формат, стойностите варират от 0 до 23, като 0 е 12:00 полунощ.
  • подарък се отнася до деня на месеца, например можете да посочите 15, ако искате да стартирате на всеки 15 дни
  • Dow означава ден от седмицата, той може да бъде цифров (0 до 7, където 0 и 7 са неделя) или първите 3 букви на деня на английски език: понеделник, вторник, сряда, четвъртък, петък, събота, слънце.
  • потребител дефинира потребителя, който ще изпълни командата, тя може да бъде root или различен потребител, стига да има разрешения за изпълнение на скрипта.
  • команда се отнася до командата или абсолютния път на скрипта, който трябва да бъде изпълнен, пример: /home/usuario/scripts/update.sh, ако извика скрипт, той трябва да бъде изпълним

За да бъдат ясни, обяснени са няколко примера за cron задачи:

15 10 * * * потребител /home/user/scripts/update.sh

Той ще стартира скрипта update.sh в 10:15 часа всеки ден

15 22 * * * потребител /home/user/scripts/update.sh

Ще стартира скрипта update.sh в 10:15 всеки ден

00 10 * * 0 root apt-get -y update Корен потребител

Ще се актуализира всяка неделя от 10:00 часа

45 10 * * актуализация apt-get -y sun root

Потребителят на root ще стартира актуализация всяка неделя (неделя) в 10:45 сутринта

30 7 20 11 * потребител /home/usuario/scripts/update.sh

На 20 ноември в 7:30 потребителят ще стартира скрипта

30 7 11 11 потребител на слънце /home/usuario/scripts/pastel_con_velitas.sh

На 11 ноември в 7:30 сутринта, а това е неделя, потребителят ще отпразнува своя сисадмин (тоест аз)

01 * * * * потребител /home/usuario/scripts/molestorecordatorio.sh

Досадно напомняне всяка минута на всеки час всеки ден (НЕ се препоръчва).

С тях все още може да се работи специални гами:

30 17 * * 1,2,3,4,5

В 5:30 следобед всеки ден от понеделник до петък.

00 12 1,15,28 * *

В 12 на обяд на първото, петнадесетото и 28-о число на всеки месец (идеално за ведомост)

Ако това е объркващо, crontab се справя специални низове за дефиниране на тези диапазони.

@reboot Стартирайте веднъж, при стартиране
@yearly работи само веднъж годишно: 0 0 1 1 *
@ ежегодно същото като @yearly
@monthly работи веднъж месечно, първия ден: 0 0 1 * *
@weekly Weekly първата минута от първия час на седмицата. 0 0 * * 0 ″.
@daily всеки ден, в 12:00 ч. 0 0 * * *
@ полунощ същото като @daily
@ на час в първата минута на всеки час: 0 * * * *

Използването му е много просто.

@hourly user /home/user/scripts/molestorecordatorio.sh @ ежемесечен потребител /home/user/scripts/backup.sh @daily root apt-get update && apt-get -y upgrade

Не на последно място:

Cron управление на работата

crontab файл

Заменете съществуващия crontab файл с дефиниран от потребителя файл

кронтаб -е

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

crontab -l

Избройте всички задачи на crontab на потребителя

crontab -d

Изтрийте crontab на потребителя

crontab -c реж

Определя директорията crontab на потребителя (това трябва да има разрешенията за писане и изпълнение на потребителя)

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

префикс за обработка на crontab на друг потребител, примери:

$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u потребител

Този инструмент, както и много други, може да се види по-задълбочено и по-подробно в:

Благодаря Lucain!

Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

  1. Отговорен за данните: Мигел Анхел Гатон
  2. Предназначение на данните: Контрол на СПАМ, управление на коментари.
  3. Легитимация: Вашето съгласие
  4. Съобщаване на данните: Данните няма да бъдат съобщени на трети страни, освен по законово задължение.
  5. Съхранение на данни: База данни, хоствана от Occentus Networks (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.

  1.   Алваро Ортис каза той

    Уф ... малко объркващо.

  2.   тоник каза той

    * / 30 липсва (в полето за минути), което се изпълнява на всеки 30 минути ...

    1.    erm3nda каза той

      Точно това щях да коментирам, докато не реших да прегледам коментарите 😀
      Този модификатор е много важна информация и нещо много полезно.

      1.    КИКА каза той

        Здравейте!
        В момента тествам конфигурация на всеки 45 минути.

        * / 45 * * * *, а инструкцията се изпълнява на 45 минути на всеки час И на всеки час. Това ще рече:

        Работи в 3:45, след това в 4:00, 4:45, след това в 5:00, 5:45, 6:00, 6:45 и т.н.

        Имам нещо нередно? Какво мога да направя, за да го направя само на всеки 45 минути или поне веднъж на 45 минути на всеки час.

    2.    КИКА каза той

      Здравейте!
      В момента тествам конфигурация на всеки 45 минути.

      * / 45 * * * *, а инструкцията се изпълнява на 45 минути на всеки час И на всеки час. Това ще рече:

      Работи в 3:45, след това в 4:00, 4:45, след това в 5:00, 5:45, 6:00, 6:45 и т.н.

      Имам нещо нередно? Какво мога да направя, за да го направя само на всеки 45 минути или поне веднъж на 45 минути на всеки час.

  3.   Застой каза той

    Здравейте супер полезна информацията за изясняване как работи cron.
    Bytes

  4.   Застой каза той

    за *

  5.   Ловец каза той

    Отлично, благодаря, че изяснихте как работи cron .. нека да подадем ръка 🙂

  6.   Яков каза той

    Този ред, както разбирам, ще бъде изпълнен в 10:15 ч., Поправете ме, ако греша
    Ами там пише 10:15 сутринта
    15 22 * * * потребител /home/user/scripts/update.sh

  7.   Агустин каза той

    Здравейте! много добра информация.
    За да се изпълни скрипт на всеки половин час, редът, който трябва да се добави към CronTab, ще бъде: "30 * * * * root Scrip.sh" Правилно? Много благодаря!

  8.   нека използваме linux каза той

    Не. Ако си спомням правилно, за това трябва да сложите / 30 * * * * root Scrip.sh.
    Тоест, добавете / преди 30.
    Наздраве! Павел.

  9.   Джонатан каза той

    Здравейте, харесах вашата публикация, тя е много пълна, но исках да ви попитам нещо.
    Имам проблеми с тази команда и една като "в".

    Искам да стартирам скрипт в определено време и да го сложа

    в -f /home/mi_user/Desk/script.sh 18:08 пример

    и скриптът не се изпълнява на екрана, тоест в терминала, изпълнява ли се във фонов режим?

    И с cron се случва същото с мен, аз редактирам файла crontab с "crontab -e"

    в края добавям този ред:

    46 19 my_user /home/mi_user/Desk/script.sh

    и не прави нищо, не показва сценария.

    Някакво предложение? Благодаря ви много и се извиняваме за евентуалните неудобства

    1.    нека използваме linux каза той

      За да се появи терминалът, може да се наложи да стартирате терминала и да предадете скрипта като параметър.

      Например:

      lxterminal -e "my_user /home/mi_user/Desktop/script.sh"

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

      Надявам се да работи.

      Прегръдка! Павел.

  10.   патретки каза той

    Приносът е оценен.

    10 точки !!

    поздрав2 !!

  11.   Rodolfo каза той

    Благодаря ви много, много ми помогна да изясня някои неща, пълна благодарност, за повече подробности или въпроси ще отида на СТРАНИЦАТА НА МЪЖА, повторен поздрав.

  12.   джахир каза той

    Чичо много благодаря, четох и тествах примерите. много благодаря ... много е разбираемо. Наздраве

  13.   Джовани каза той

    Използвах ubuntu Server 12.04.2 LTS и се използва версията на crontab, която имам, за изтриване на списъка със заданията на потребителя, crontab -r (и -l, както се казва в това ръководство). Разбира се, става въпрос за версии.

    От друга страна, веднъж стартирах само crontab и този вид ми позволи да създам свой собствен изпълнителен файл, но това не беше този, който се изпълняваше. Този, който се изпълнява, е този в / etc / crontab. може би някой ще използва коментара.

    PS (Търсих с locate и whereis crontab, но той върна само гореспоменатия адрес и друг файл, който е криптиран, така че ако този, който беше изпълнен, беше този в / etc / crontab, но при изпълнение на командата crontab -e, моят би се появяват с всички задания, които бях дефинирал) къде се съхранява този файл '???? За разбирането. Винаги влизам с root.

  14.   Sebastian каза той

    Отлично, много полезно !!!

  15.   ммм каза той

    Здравейте, бих искал да направя това ………… «15 10 * * * root ifdown eth0»

    тоест в определено време мрежовата карта се изключва ………… добре, сложих я в crontab и тя не работи …… .. какво има?

    Saludos г. Gracias

  16.   Мигел каза той

    Пропуснахте да дефинирате „mon“ след заглавието „Добавяне на задачи в crontab“

    Статията все още е хубава, cron е изключително полезна.

  17.   Оскар каза той

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

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

    благодаря

  18.   "Оскар" каза той

    Искам да проверя историята на модификациите на това

    как мога да го направя

    благодаря

  19.   Андрес Ледо каза той

    Добро утро,

    Мисля, че в скрипта на ubuntu сте сгрешили, сте сложили надстройка ap-get -y вместо apt-get -y ъпгрейд. (Оставили сте t).

    За поздрав.

    1.    нека използваме linux каза той

      Така е. Благодаря ти!
      Прегръдка! Павел

  20.   Gabriel каза той

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

  21.   Валентин каза той

    Благодаря, че изяснихте операцията и основните команди за cron, сега да се забавлявате за малко.

  22.   Sander каза той

    Винаги, когато търся информация по която и да е тема, свързана с Gnu / Linux, обикалям, за да намеря винаги в 90% от случаите най-добрия урок в тази велика общност, мисля, че оттук нататък ще започна тук и след това на друго място.

    поздрави

    1.    нека използваме linux каза той

      Благодаря Sander! Прегръдка! Павел.

  23.   дарио каза той

    dom = ден от месеца
    dow = ден от седмицата
    по-лесно е, ако асоциирате

  24.   великденски каза той

    Благодаря ви много, много пълно и добре обяснено.

  25.   Максилия каза той

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

  26.   Марсело каза той

    Изчислено,

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

    Благодаря,
    Марсело.

    1.    нека използваме linux каза той

      Здравей, Марсело!

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

      Прегръдка, Пабло.

  27.   aj каза той

    добър пост.
    Каква е командата на терминал за добавяне на задачи към crontab (без да въвеждате crontab и да ги добавяте ръчно с 'crontab -e' или да замествате crontab с друг crontab с 'crontab файл').
    Идеята е да се създаде външен скрипт за добавяне на задачите към crontab
    благодаря

    1.    Дейвид каза той

      струва ми се, че бихте могли да използвате 'echo' каквото искате да добавите '| котка >> 'пътека на cronotab (/ etc / cronotab)' «

  28.   Рафаел Вера каза той

    Как би се изпълнил израз на всеки 3 дни точно

  29.   Хосе Антонио каза той

    Здравейте.

    Имам проблем с изпълнението на cron работа.

    Изпълнявам следната задача с cronta -e:

    01 * * * * root /home/user/script/mfile.sh

    но задачата не е изпълнена. Проверих дали myfile.sh има разрешение за изпълнение и дали потребителят, който го изпълнява, е root.

    Изпълнявам същата задача в / etc / crontab и след рестартиране на услугата, тя също не работи при мен.
    Съдържанието на myfile.sh е команда, която актуализира DB и ако я стартирам в конзолата, тя работи.
    някаква идея какъв може да е проблемът?

    1.    Фред каза той

      Потребителят на базата данни може да няма всички разрешения и първо ще трябва да експортирате променливите на средата от вашия механизъм на базата данни.
      Например в db2, този ред ще отиде в началото на скрипта
      . / home / db2inst1 / sqllib / db2profile

      Друга причина може да бъде, че скриптът изисква връзка с базата данни, направете връзка с базата данни в рамките на скрипта

  30.   LA3 каза той

    Не знаех, че трябва да рестартирам crond, от известно време се борих с това

  31.   Кения каза той

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

  32.   Исус каза той

    добър ден!!

    Как да спра процеса, който се изпълнява в crontab?

  33.   Исус каза той

    процес * …………

  34.   Джулиана каза той

    Може ли да ми помогнете? eu tenho um script от автор на minha, който не работи, няма crontab! Jб действа всички разрешения, а не конкретен cron или потребител, който може да го изпълни - почти нищо не се случва! Бих искал да знам дали можете да ми помогнете, някои други неща не работят без крон! Vlws

  35.   Антокс каза той

    Как бихте поставили задача да се изпълнява всеки последен ден от месеца (дни: 31-30-28)?

  36.   тферчо каза той

    Както вече знаете, командата su се използва за промяна на потребител в конзола. Ако използвам командата su по следния начин: "вашият потребител" променя потребителя, но без правилните настройки на "потребител", ако стартирам su като: "su - потребител" променя потребителя чрез зареждане на потребителските настройки. С cron посочвам потребителя, но как да заредя настройките на този потребител?

  37.   Грабя каза той

    И ако искам да го спра?

  38.   Реджи каза той

    Здравейте,
    Не знам какво правя погрешно, но следвам стъпките и нищо не се изпълнява. Опитах:
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * root / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * * root usr / bin / test.sh

    и изобщо нищо. Той не изпълнява нищо. Рестартирах и всичко.

  39.   Ferqos каза той

    Благодаря ви много