Cron и crontab, объяснение

Lucain опубликованный некоторое время назад отличный учебник по cron и crontab этим, я думаю, стоит поделиться. Cron - это своего рода эквивалент запланированных задач в Windows, только то, что он обрабатывается с терминала. Те, кто предпочитает визуальный интерфейс для достижения той же цели, могут это увидеть. другая статья.

Что такое cron?

Название cron происходит от греческого chronos, что означает «время». В операционной системе Unix cron - это обычный диспетчер фоновых процессов (демон), который запускает процессы или сценарии через регулярные промежутки времени (например, каждую минуту, день, неделю или месяц). Процессы, которые должны быть выполнены, и время, в которое они должны быть выполнены, указаны в файле crontab.

Как это работает?

Демон cron запускается с /etc/rc.d/ o /etc/инит.д в зависимости от распределения. Cron работает в фоновом режиме, каждую минуту проверяет таблицу задач crontab / etc / crontab о ан / var / spool / cron в поисках задач, которые необходимо выполнить. Как пользователь, мы можем добавлять в cron команды или скрипты с задачами для автоматизации некоторых процессов. Это полезно, например, для автоматизации обновления системы или хорошей системы резервного копирования.

Теме статьи:
Учебное пособие: установка пакетов .tar.gz и .tar.bz2

Что такое Кронтаб?

Crontab - это простой текстовый файл, в котором хранится список команд, которые должны выполняться в указанное пользователем время. Crontab проверит дату и время выполнения сценария или команды, разрешения на выполнение и сделает это в фоновом режиме. У каждого пользователя может быть свой собственный файл crontab, фактически / etc / 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 ~ / скрипты / 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 дней
  • Доу означает день недели, он может быть числовым (от 0 до 7, где 0 и 7 - воскресенье) или первыми тремя буквами дня на английском языке: пн, вт, ср, чт, пт, сб, вс.
  • пользователь определяет пользователя, который будет выполнять команду, это может быть 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 Пользователь root

Он будет запускать обновление каждое воскресенье в 10:00.

45 10 * * sun root apt-get -y обновление

Пользователь root будет запускать обновление каждое воскресенье (вс) в 10:45.

30 7 20 11 * пользователь /home/usuario/scripts/update.sh

20 ноября в 7:30 пользователь запустит скрипт

30 7 11 11 sun пользователь /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 A.M. 0 0 * * *
@ полночь то же, что и @daily
@hourly в первую минуту каждого часа: 0 * * * *

Его использование очень простое.

@hourly user /home/user/scripts/molestorecordatorio.sh @monthly user /home/user/scripts/backup.sh @daily root apt-get update && apt-get -y upgrade

Последний, но тем не менее важный:

Управление заданиями Cron

crontab файл

Замените существующий файл crontab пользовательским файлом

кронтаб -e

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

crontab -l

Список всех задач crontab пользователя

кронтаб -d

Удалить crontab пользователя

crontab -c каталог

Определяет каталог crontab пользователя (он должен иметь права пользователя на запись и выполнение)

crontab -u пользователь

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

$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u user

Этот инструмент, как и многие другие, можно увидеть более подробно и подробно в:

Спасибо, Люкайн!

48 комментариев, оставьте свой

Оставьте свой комментарий

Ваш электронный адрес не будет опубликован. Обязательные для заполнения поля помечены *

*

*

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

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

    Ух ... немного запутано.

  2.   тонизирующий сказал

    * / 30 отсутствует (в поле минут), который запускается каждые 30 минут ...

    1.    эрм3нда сказал

      Только это я собирался комментировать, пока не решил просмотреть комментарии 😀
      Этот модификатор - очень важная информация и что-то очень полезное.

      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.
    Б

  4.   Вялый сказал

    для *

  5.   охотник сказал

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

  6.   Иаков сказал

    Эта строка, насколько я понимаю, будет выполнена в 10:15, поправьте меня, если я ошибаюсь
    Ну там написано 10:15 утра
    15 22 * * * пользователь /home/user/scripts/update.sh

  7.   Agustin сказал

    Здравствуйте! очень хорошая информация.
    Чтобы выполнять сценарий каждые полчаса, в CronTab следует добавить строку: «30 * * * * root Scrip.sh» Верно? Большое спасибо!

  8.   давайте использовать Linux сказал

    Нет. Если я правильно помню, для этого нужно поместить / 30 * * * * root Scrip.sh.
    То есть добавьте / перед 30.
    Ура! Павел.

  9.   Джонатан сказал

    Здравствуйте, мне понравился ваш пост, он очень полный, но я хотел вас кое-что спросить.
    У меня проблемы с этой командой и одной вроде "at".

    Я хочу запустить скрипт в определенное время и поставить

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

    и скрипт не выполняется на экране, то есть в терминале он выполняется в фоновом режиме?

    И с cron со мной происходит то же самое, я редактирую файл crontab с помощью "crontab -e"

    в конце добавляю эту строчку:

    46 19 мой_пользователь /home/mi_user/Desk/script.sh

    и он ничего не делает, он не показывает сценарий.

    Любое предложение? Большое спасибо и приносим свои извинения за неудобства.

    1.    давайте использовать Linux сказал

      Чтобы терминал появился, вам, возможно, придется запустить терминал и передать скрипт в качестве параметра.

      Например:

      lxterminal -e "мой_пользователь /home/mi_user/Desktop/script.sh"

      Используемый параметр может различаться в зависимости от используемого эмулятора терминала.

      Надеюсь это работает.

      Объятие! Павел.

  10.   Patretcas сказал

    Вклад ценится.

    10 баллов !!

    салу2 !!

  11.   Родольфо сказал

    Большое спасибо, это очень помогло мне прояснить некоторые вещи, полное спасибо, для получения более подробной информации или сомнений я перейду на СТРАНИЦУ ЧЕЛОВЕКА, еще раз приветствую.

  12.   jahir сказал

    Человек большое спасибо, я читал и тестировал примеры. спасибо большое ... это очень понятно. С уважением

  13.   Джеованни сказал

    Я использовал ubuntu Server 12.04.2 LTS и версию crontab, которая у меня есть, для удаления списка пользовательских заданий используется crontab -r (и -l, как сказано в этом руководстве). Конечно, это вопрос версий.

    С другой стороны, я когда-то запускал только crontab, и это позволяло мне создать свой собственный исполняемый файл, но это был не тот, который выполнялся. Тот, который запускается, находится в / etc / crontab. может кто воспользуется комментарием.

    PS (Я искал с помощью locate и whereis crontab, но он вернул только вышеупомянутый адрес и еще один зашифрованный файл, поэтому, если тот, который был выполнен, был в / etc / crontab, но при выполнении команды crontab -e мой бы появляются со всеми заданиями, которые я определил) где хранился этот файл '???? Привет. Я всегда вхожу в систему с рутом.

  14.   Себастьян сказал

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

  15.   ммм сказал

    Здравствуйте, я бы хотел это сделать ………… «15 10 * * * root ifdown eth0»

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

    Saludos у Gracias

  16.   Мигель сказал

    Вы пропустили определение «пн» после заголовка «Добавить задачи в crontab»

    Статья по-прежнему красивая, cron чрезвычайно полезен.

  17.   Оскар сказал

    Насколько крутым был этот хороший пост, спросите меня
    Если я хочу отслеживать записи, оставленные выполнением задач, где я могу это увидеть?

    is decdir Я хочу увидеть историю действий, выполненных в прошлом с этим файлом, и я хочу увидеть, кто его изменил, и дату

    Gracias

  18.   Оскар сказал

    Я хочу проверить историю изменений этого

    как я могу это сделать

    Gracias

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

    Доброе утро,

    Я думаю, что в скрипте ubuntu вы ошиблись, вы поставили ap-get -y upgrade вместо apt-get -y upgrade. (Вы оставили т).

    Приветствие.

    1.    давайте использовать Linux сказал

      Так и есть. Спасибо!
      Объятие! Павел

  20.   Габриель сказал

    Я хочу знать, как создать файл cron, чтобы иметь возможность указывать время каждого его выполнения, каталог и т. Д.

  21.   Валентин сказал

    Спасибо за разъяснение работы и основных команд для cron, а теперь немного развлечемся.

  22.   Сандер сказал

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

    привет

    1.    давайте использовать Linux сказал

      Спасибо, Сандер! Объятья! Павел.

  23.   дарио сказал

    dom = день месяца
    dow = день недели
    это проще, если вы общаетесь

  24.   Пасхальный сказал

    Большое спасибо, очень полно и хорошо объяснено.

  25.   Максиллия сказал

    Это то же самое, что дал нам мой учитель по операционным системам, я ничего не меняю, теперь я понимаю, почему уроки такие плохие .- Ну, это то же самое, что и домашнее задание xD

  26.   Marcelo сказал

    По оценкам,

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

    Спасибо,
    Марсело.-

    1.    давайте использовать Linux сказал

      Привет, Марсело!

      Думаю, будет лучше, если вы зададите этот вопрос в нашей службе вопросов и ответов под названием Просить DesdeLinux чтобы все сообщество могло помочь вам с вашей проблемой.

      Обнимаю, Пабло.

  27.   aj сказал

    хороший пост.
    Какова команда терминала для добавления задач в crontab (без входа в crontab и добавления их вручную с помощью crontab -e или замены crontab другим crontab с файлом crontab).
    Идея состоит в том, чтобы создать внешний скрипт для добавления задач в crontab.
    спасибо

    1.    Дэвид сказал

      мне кажется, что вы можете использовать «echo» все, что хотите добавить »| cat >> 'cronotab path (/ etc / cronotab)' «

  28.   Рафаэль Вера сказал

    Как бы выражение запускалось точно каждые 3 дня

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

    Эй.

    У меня проблема с выполнением задания cron.

    Я запускаю следующую задачу с помощью cronta -e:

    01 * * * * корень /home/user/script/mfile.sh

    но задача не выполнена. Я проверил, что myfile.sh имеет разрешение на выполнение и что пользователь, который его выполняет, является пользователем root.

    Я запускаю ту же задачу в / etc / crontab, и после перезапуска службы у меня тоже не работает.
    Содержимое myfile.sh - это команда, которая обновляет БД, и если я запускаю ее в консоли, она работает.
    есть идеи, в чем может быть проблема?

    1.    Fredd сказал

      Пользователь базы данных может не иметь всех разрешений, и вам сначала придется экспортировать переменные среды из ядра базы данных.
      Например, в db2 эта строка будет идти в начало скрипта
      . / главная / db2inst1 / sqllib / db2profile

      Другая причина может заключаться в том, что для сценария требуется подключение к базе данных, выполните подключение к базе данных в сценарии.

  30.   LA3 сказал

    Я не знал, что надо перезапускать crond, долго боролся с этим

  31.   Кения сказал

    Они будут знать, как указать, что задача запускается каждый конец месяца в указанное время .. деталь в том, что я не могу добиться, как я знаю, что она выполняется в последний день каждого месяца .. ??? Мне приходилось записывать их один за другим, но когда приходит конец февраля, это очень сложно для меня ..

  32.   Иисус сказал

    хорошего дня!!

    Как остановить процесс, выполняемый в crontab?

  33.   Иисус сказал

    обработать * …………

  34.   Джулианна сказал

    Неужели ты можешь мне помочь? eu tenho um сценарий minha, автор которого не работает no crontab! Jb dei все разрешения, а не конкретный cron или пользователь, который может его выполнить - в большинстве случаев ничего не происходит! Я хотел бы знать, можете ли вы мне помочь, некоторые другие вещи не работают cron! VLWS

  35.   Anthox сказал

    Как бы вы поставили задачу запускать каждый последний день месяца (дни: 31-30-28)?

  36.   Tfercho сказал

    Как вы уже знаете, команда su используется для смены пользователя в консоли. Если я использую команду su таким образом: «ваш пользователь» меняет пользователя, но без правильных настроек «пользователь», если я запускаю su как: «su - пользователь», меняйте пользователя, загружая пользовательские настройки. С помощью cron я указываю пользователя, но как мне загрузить настройки этого пользователя?

  37.   Роб сказал

    А если я захочу это остановить?

  38.   Реги сказал

    Привет,
    Я не знаю, что делаю не так, но я следую инструкциям, и ничего не выполняется. Я пытался:
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * корень / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * * корень usr / bin / test.sh

    и вообще ничего. Он ничего не выполняет. Перезагрузился и все.

  39.   Феркос сказал

    Большое спасибо