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 команды или скрипты с задачами для автоматизации некоторых процессов. Это полезно, например, для автоматизации обновления системы или хорошей системы резервного копирования.
Что такое Кронтаб?
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
Этот инструмент, как и многие другие, можно увидеть более подробно и подробно в:
Ух ... немного запутано.
* / 30 отсутствует (в поле минут), который запускается каждые 30 минут ...
Только это я собирался комментировать, пока не решил просмотреть комментарии 😀
Этот модификатор - очень важная информация и что-то очень полезное.
Привет!
Сейчас я тестирую конфигурацию каждые 45 минут.
* / 45 * * * *, и инструкция выполняется через 45 минут каждый час И каждый час. То есть:
Он запускается в 3:45, затем в 4:00, 4:45, затем в 5:00, 5:45, 6:00, 6:45 и так далее.
У меня что-то не так? Что я могу сделать, чтобы это происходило только каждые 45 минут или хотя бы раз в 45 минут каждый час.
Привет!
Сейчас я тестирую конфигурацию каждые 45 минут.
* / 45 * * * *, и инструкция выполняется через 45 минут каждый час И каждый час. То есть:
Он запускается в 3:45, затем в 4:00, 4:45, затем в 5:00, 5:45, 6:00, 6:45 и так далее.
У меня что-то не так? Что я могу сделать, чтобы это происходило только каждые 45 минут или хотя бы раз в 45 минут каждый час.
Здравствуйте, супер полезная информация, чтобы прояснить, как работает cron.
Б
для *
Отлично, спасибо за пояснение, как работает cron .. давайте приложим немного усилий 🙂
Эта строка, насколько я понимаю, будет выполнена в 10:15, поправьте меня, если я ошибаюсь
Ну там написано 10:15 утра
15 22 * * * пользователь /home/user/scripts/update.sh
Здравствуйте! очень хорошая информация.
Чтобы выполнять сценарий каждые полчаса, в CronTab следует добавить строку: «30 * * * * root Scrip.sh» Верно? Большое спасибо!
Нет. Если я правильно помню, для этого нужно поместить / 30 * * * * root Scrip.sh.
То есть добавьте / перед 30.
Ура! Павел.
Здравствуйте, мне понравился ваш пост, он очень полный, но я хотел вас кое-что спросить.
У меня проблемы с этой командой и одной вроде "at".
Я хочу запустить скрипт в определенное время и поставить
at -f /home/mi_user/Desk/script.sh 18:08 пример
и скрипт не выполняется на экране, то есть в терминале он выполняется в фоновом режиме?
И с cron со мной происходит то же самое, я редактирую файл crontab с помощью "crontab -e"
в конце добавляю эту строчку:
46 19 мой_пользователь /home/mi_user/Desk/script.sh
и он ничего не делает, он не показывает сценарий.
Любое предложение? Большое спасибо и приносим свои извинения за неудобства.
Чтобы терминал появился, вам, возможно, придется запустить терминал и передать скрипт в качестве параметра.
Например:
lxterminal -e "мой_пользователь /home/mi_user/Desktop/script.sh"
Используемый параметр может различаться в зависимости от используемого эмулятора терминала.
Надеюсь это работает.
Объятие! Павел.
Вклад ценится.
10 баллов !!
салу2 !!
Большое спасибо, это очень помогло мне прояснить некоторые вещи, полное спасибо, для получения более подробной информации или сомнений я перейду на СТРАНИЦУ ЧЕЛОВЕКА, еще раз приветствую.
Человек большое спасибо, я читал и тестировал примеры. спасибо большое ... это очень понятно. С уважением
Я использовал ubuntu Server 12.04.2 LTS и версию crontab, которая у меня есть, для удаления списка пользовательских заданий используется crontab -r (и -l, как сказано в этом руководстве). Конечно, это вопрос версий.
С другой стороны, я когда-то запускал только crontab, и это позволяло мне создать свой собственный исполняемый файл, но это был не тот, который выполнялся. Тот, который запускается, находится в / etc / crontab. может кто воспользуется комментарием.
PS (Я искал с помощью locate и whereis crontab, но он вернул только вышеупомянутый адрес и еще один зашифрованный файл, поэтому, если тот, который был выполнен, был в / etc / crontab, но при выполнении команды crontab -e мой бы появляются со всеми заданиями, которые я определил) где хранился этот файл '???? Привет. Я всегда вхожу в систему с рутом.
Отлично, очень полезно !!!
Здравствуйте, я бы хотел это сделать ………… «15 10 * * * root ifdown eth0»
то есть, что в определенное время сетевая карта отключается ………… ну, я вставил ее в crontab, и она не работает …… .. что случилось?
Saludos у Gracias
Вы пропустили определение «пн» после заголовка «Добавить задачи в crontab»
Статья по-прежнему красивая, cron чрезвычайно полезен.
Насколько крутым был этот хороший пост, спросите меня
Если я хочу отслеживать записи, оставленные выполнением задач, где я могу это увидеть?
is decdir Я хочу увидеть историю действий, выполненных в прошлом с этим файлом, и я хочу увидеть, кто его изменил, и дату
Gracias
Я хочу проверить историю изменений этого
как я могу это сделать
Gracias
Доброе утро,
Я думаю, что в скрипте ubuntu вы ошиблись, вы поставили ap-get -y upgrade вместо apt-get -y upgrade. (Вы оставили т).
Приветствие.
Так и есть. Спасибо!
Объятие! Павел
Я хочу знать, как создать файл cron, чтобы иметь возможность указывать время каждого его выполнения, каталог и т. Д.
Спасибо за разъяснение работы и основных команд для cron, а теперь немного развлечемся.
Всякий раз, когда я ищу информацию по какой-либо теме, связанной с Gnu / Linux, я обхожу все вокруг и всегда, чтобы найти в 90% случаев лучший учебник в этом великом сообществе, я думаю, что с этого момента я начну здесь, а затем в другом месте.
привет
Спасибо, Сандер! Объятья! Павел.
dom = день месяца
dow = день недели
это проще, если вы общаетесь
Большое спасибо, очень полно и хорошо объяснено.
Это то же самое, что дал нам мой учитель по операционным системам, я ничего не меняю, теперь я понимаю, почему уроки такие плохие .- Ну, это то же самое, что и домашнее задание xD
По оценкам,
Запрос, можно ли ограничить время выполнения задачи?
Например, у меня есть задача, которая повторяется каждые 5 минут, при повторении, если эта задача все еще активна, убить ее и запустить снова.
Спасибо,
Марсело.-
Привет, Марсело!
Думаю, будет лучше, если вы зададите этот вопрос в нашей службе вопросов и ответов под названием Просить DesdeLinux чтобы все сообщество могло помочь вам с вашей проблемой.
Обнимаю, Пабло.
хороший пост.
Какова команда терминала для добавления задач в crontab (без входа в crontab и добавления их вручную с помощью crontab -e или замены crontab другим crontab с файлом crontab).
Идея состоит в том, чтобы создать внешний скрипт для добавления задач в crontab.
спасибо
мне кажется, что вы можете использовать «echo» все, что хотите добавить »| cat >> 'cronotab path (/ etc / cronotab)' «
Как бы выражение запускалось точно каждые 3 дня
Эй.
У меня проблема с выполнением задания cron.
Я запускаю следующую задачу с помощью cronta -e:
01 * * * * корень /home/user/script/mfile.sh
но задача не выполнена. Я проверил, что myfile.sh имеет разрешение на выполнение и что пользователь, который его выполняет, является пользователем root.
Я запускаю ту же задачу в / etc / crontab, и после перезапуска службы у меня тоже не работает.
Содержимое myfile.sh - это команда, которая обновляет БД, и если я запускаю ее в консоли, она работает.
есть идеи, в чем может быть проблема?
Пользователь базы данных может не иметь всех разрешений, и вам сначала придется экспортировать переменные среды из ядра базы данных.
Например, в db2 эта строка будет идти в начало скрипта
. / главная / db2inst1 / sqllib / db2profile
Другая причина может заключаться в том, что для сценария требуется подключение к базе данных, выполните подключение к базе данных в сценарии.
Я не знал, что надо перезапускать crond, долго боролся с этим
Они будут знать, как указать, что задача запускается каждый конец месяца в указанное время .. деталь в том, что я не могу добиться, как я знаю, что она выполняется в последний день каждого месяца .. ??? Мне приходилось записывать их один за другим, но когда приходит конец февраля, это очень сложно для меня ..
хорошего дня!!
Как остановить процесс, выполняемый в crontab?
обработать * …………
Неужели ты можешь мне помочь? eu tenho um сценарий minha, автор которого не работает no crontab! Jb dei все разрешения, а не конкретный cron или пользователь, который может его выполнить - в большинстве случаев ничего не происходит! Я хотел бы знать, можете ли вы мне помочь, некоторые другие вещи не работают cron! VLWS
Как бы вы поставили задачу запускать каждый последний день месяца (дни: 31-30-28)?
Как вы уже знаете, команда su используется для смены пользователя в консоли. Если я использую команду su таким образом: «ваш пользователь» меняет пользователя, но без правильных настроек «пользователь», если я запускаю su как: «su - пользователь», меняйте пользователя, загружая пользовательские настройки. С помощью cron я указываю пользователя, но как мне загрузить настройки этого пользователя?
А если я захочу это остановить?
Привет,
Я не знаю, что делаю не так, но я следую инструкциям, и ничего не выполняется. Я пытался:
59 * * * * / usr / bin / gedit
* * * * * / usr / bin / gedit
* * * * * корень / usr / bin / gedit
* * * * * usr / bin / test.sh
* * * * * корень usr / bin / test.sh
и вообще ничего. Он ничего не выполняет. Перезагрузился и все.
Большое спасибо