Кронтаб, где находится файл

Обновлено: 04.07.2024

Планирование в Linux выполняется системным демоном cron. Демон cron выполняет задачи в определенное время, и эти задачи называются заданиями cron. Задания cron в основном используются для автоматизации обслуживания или администрирования системы. Вы можете автоматизировать почти все с демоном cron. Например, вы можете настроить задание cron для резервного копирования вашего домашнего каталога, отправки предупреждений, установки программного обеспечения и многого другого.

Демон cron запускается автоматически из /etc/init.d, когда вы переходите на многопользовательский уровень запуска. Задания cron перечислены в файлах crontab и расположены в области буфера cron /var/spool/cron/crontabs. Cron ищет эти файлы и загружает их в память для выполнения. Другой файл, который читает cron, это /etc/crontab. В Debain и Ubuntu /etc/crontab ежедневно, ежечасно, еженедельно и ежемесячно выполняет программы, написанные в каталогах /etc/cron.daily, /etc/cron.hourly, /etc/cron.weekly и /etc/cron.monthly.

Crontab — это утилита, которая поддерживает файлы crontab для отдельных пользователей. Файл Crontab представляет собой простой текстовый файл со списком команд, которые выполняются в определенное время. Рекомендуется использовать команду crontab для доступа и обновления файлов crontab в /var/spool/cron/crontabs. Crontab означает «таблицу cron», которую демон cron использует для планирования заданий. У каждого пользователя есть файл crontab, который регулярно проверяется демоном cron независимо от того, вошел ли пользователь в систему или нет.

В панели управления Webdock легко управлять записями Crontab для любого пользователя на вашем сервере. Просмотрите экран сервера Cron Jobs для получения дополнительной информации.

Начало работы с Crontab

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

Это откроет файл crontab в вашем любимом редакторе, расположенном в /var/spool/cron/crontabs/edward (edward — это наше имя пользователя в этом примере, оно может отличаться в вашем случае). Вывод приведенной выше команды будет (наш редактор здесь nano):

crontab-1.jpg

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

Демон cron планирует системные события в соответствии с командами, найденными в каждом файле crontab. Файл crontab состоит из команд, по одной на строку, которые будут выполняться через равные промежутки времени. Начало каждой строки содержит информацию о дате и времени, которая сообщает демону cron, когда выполнять команду.

Например, файл crontab с именем root предоставляется во время установки программного обеспечения SunOS. Его содержимое включает следующие командные строки:

Первая командная строка указывает системе запускать программу проверки журналов в 3:10 по воскресеньям и четвергам. Вторая командная строка назначает системе запуск журнала новостей в 3:10 утра каждое воскресенье. Третья командная строка приказывает системе выполнять nfsfind по воскресеньям в 3:15 утра. Четвертая командная строка предписывает системе ежедневно проверять переход на летнее время и при необходимости вносить исправления. Если нет ни часового пояса RTC, ни файла /etc/rtc_config, эта запись ничего не сделает. Пятая командная строка указывает системе проверять и удалять повторяющиеся записи в таблице Generic Security Service, /etc/gss/gsscred_db .

Дополнительную информацию о синтаксисе строк в файле crontab см. в разделе "Синтаксис записей файла crontab".

Файлы crontab хранятся в /var/spool/cron/crontabs. Во время установки программного обеспечения SunOS предоставляется несколько файлов crontab помимо root (см. следующую таблицу).

Общие системные функции и очистка файловой системы

Общая очистка uucp

Помимо файла crontab по умолчанию, пользователи могут создавать файлы crontab для планирования собственных системных событий.

Другие файлы crontab названы в честь учетных записей пользователей, в которых они созданы, например bob, mary, smith или Джонс.

Для доступа к файлам crontab, принадлежащим root или другим пользователям, требуются права суперпользователя.

Процедуры, объясняющие, как создавать, редактировать, отображать и удалять файлы crontab, описаны в разделе «Команды для планирования системных событий».

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

Если это зависит от дистрибутива, я использую Centos5 и Mint 17


2 ответа 2

Файлы cron для отдельных пользователей находятся в /var/spool/cron/crontabs/ .
От человека crontab:

Каждый пользователь может иметь свой собственный crontab, и хотя это файлы в /var/spool/cron/crontabs , они не предназначены для прямого редактирования.

Ключевыми словами здесь являются «они не предназначены для непосредственного редактирования», поэтому этот ответ будет неполным без приведенной ниже команды Селады, которая обеспечивает более безопасный ответ на часть вопроса «копировать другому пользователю». Если у людей войдет в привычку редактировать crontab напрямую, не отправляя их через команду crontab, они отказываются от многочисленных проверок работоспособности, которые предоставляет команда.

@MontyHarder Я согласен, что «они не предназначены для непосредственного редактирования», но что, если в этом есть необходимость, например, необходимо сделать запись в crontab с помощью сценария bash. вы должны использовать точный файл, я не думаю, что какой-либо внешний интерфейс поможет в этом случае, поправьте меня, если я ошибаюсь.

@PrabhatKumarSingh Вы по-прежнему не должны редактировать файл напрямую. Если вы читали приведенную ниже команду Celada, то видели пример того, как сценарий может манипулировать файлом crontab, не редактируя его напрямую. man crontab объясняет, как это работает.

heemayl правильно указывает расположение файлов crontab в Linux, но оно может быть другим в других операционных системах и «теоретически» также может находиться в другом месте в Linux. По сути, когда для доступа к файлам предоставляется специальный интерфейс, вы должны использовать его. Это гарантирует, что cron проверит файлы перед их установкой, удостоверится, что файлы имеют необходимые разрешения и т. д.

Поэтому вам следует копировать crontab от одного пользователя к другому, используя этот интерфейс, как этот, а не напрямую обращаясь к файлам.


Есть много веских причин, по которым файлы crontab не должны напрямую манипулироваться ничем, кроме самой ОС. Это гораздо лучшее решение. Я действительно думаю, что это нужно включить в официальный ответ.

@MontyHarder На самом деле нет «официального» ответа. Есть ответ, который спрашивающий выбрал как полезный лично для него/нее (тот, что отмечен галочкой), и ответ, который выбрало сообщество (с наибольшим количеством голосов). Короче говоря, у вас есть 15 повторений, вы можете предложить это правильный ответ, проголосовав за него. Кроме того, если вы хотите предложить улучшения к другому ответу, вам необходимо прокомментировать этот ответ, иначе его автор не будет уведомлен о вашем комментарии.

Следствием этого ответа является то, что нужно перенаправить вывод crontab -l в файл, переместить файл в другую систему и передать его в crontab . Или, может быть, даже сделать это напрямую ( crontab -l | ssh $remote_host crontab ).

"когда для доступа к файлам предоставляется специальный интерфейс, вы должны использовать его." Представьте себе, что каждое приложение предоставляет специальный интерфейс для редактирования файлов конфигурации, а не просто предоставляет их через fs. Было бы довольно неприятно следить за этим.

Как первоначальный вопросник, я думаю, что должен взвесить это: принятый ответ был выбран на основе моего вопроса в его буквальном смысле; расположение файла. Мои намерения в отношении этого файла не имеют значения. Я не думаю, что редактирование дополнительной информации изменит ответ, но это может быть сочтено излишним.

Cron — это системный демон, используемый для выполнения нужных задач (в фоновом режиме) в назначенное время.

Файл crontab — это простой текстовый файл, содержащий список команд, которые должны выполняться в определенное время. Редактируется с помощью команды crontab. Команды в файле crontab (и время их выполнения) проверяются демоном cron, который выполняет их в фоновом режиме системы.

У каждого пользователя (включая root) есть файл crontab. Демон cron проверяет файл crontab пользователя независимо от того, вошел ли пользователь в систему или нет.

Чтобы отобразить интерактивную справку для crontab, введите:

или дополнительная информация доступна в спецификациях OpenGroup.

Чтобы использовать cron для задач, предназначенных только для вашего профиля пользователя, добавьте записи в файл crontab вашего собственного пользователя. Чтобы отредактировать файл crontab, введите:

Редактируйте crontab, используя формат, описанный в следующих разделах. Сохраните изменения. (Выход без сохранения оставит ваш crontab без изменений.) Чтобы отобразить интерактивную справку, описывающую формат файла crontab, введите:

Команды, которые обычно запускаются с правами администратора (т. е. обычно запускаются с помощью sudo), должны быть добавлены в корневой crontab. Чтобы отредактировать корневой crontab, введите:

В каждой строке есть пять полей даты и времени, за которыми следует команда, за которой следует символ новой строки ('\n'). Поля разделены пробелами. Пять полей даты и времени не могут содержать пробелы.Пять полей времени и даты: минуты (0–59), часы (0–23, 0 = полночь), день (1–31), месяц (1–12), день недели (0–6, 0 = воскресенье).

Приведенный выше пример запустит /usr/bin/somedirectory/somecommand в 4:01 утра 1 января и каждый понедельник января.

Звездочку (*) можно использовать, чтобы использовать каждый экземпляр (каждый час, каждый день недели, каждый месяц и т. д.) периода времени.

Приведенный выше пример будет запускать /usr/bin/somedirectory/somecommand в 4:01 утра каждого дня каждого месяца.

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

Приведенный выше пример будет запускать /usr/bin/somedirectory/somecommand в 01 и 31 после 4:00 и 5:00 утра с 1 по 15 числа каждого января и июня.

Текст "/usr/bin/somedirectory/somecommand" в приведенных выше примерах указывает на задачу, которая будет выполняться в указанное время. Рекомендуется использовать полный путь к нужным командам, как показано в приведенных выше примерах. Введите somecommand в терминале, чтобы найти полный путь к somecommand. Кронтаб начнет работать, как только он будет правильно отредактирован и сохранен.

Вы можете запускать скрипт несколько раз в единицу времени. Например, если вы хотите запускать его каждые 10 минут, используйте следующую запись в crontab (запускается в минутах, кратных 10: 0, 10, 20, 30 и т. д.)

что также эквивалентно более громоздкому

Приведенный выше пример будет выполнять /path/to/executable1 при запуске системы.

Для получения дополнительной информации о специальных строках введите "man 5 crontab".

  • Опция -l приводит к отображению текущего файла crontab в стандартном выводе.
  • Опция -r приводит к удалению текущего файла crontab.
  • Опция -e используется для редактирования текущего crontab с помощью редактора, указанного в переменной среды EDITOR.

После выхода из редактора измененный crontab проверяется на наличие ошибок и, если ошибок нет, устанавливается автоматически. Файл хранится в /var/spool/cron/crontabs, но редактировать его следует только с помощью команды crontab.

Если файл /etc/cron.allow существует, пользователи должны быть перечислены в нем, чтобы им было разрешено запускать команду crontab. Если файл /etc/cron.allow не существует, а файл /etc/cron.deny существует, то пользователи не должны быть указаны в файле /etc/cron.deny для запуска crontab.

В случае, если ни один файл не существует, по умолчанию в текущей версии Ubuntu (и Debian, но не в некоторых других системах Linux и UNIX) всем пользователям разрешено выполнять задания с помощью crontab.

В стандартной установке Ubuntu нет файлов cron.allow или cron.deny, поэтому у всех пользователей должен быть доступен cron по умолчанию, пока не будет создан один из этих файлов. Если был создан пустой файл cron.deny, это изменится на стандартное поведение, которое могут ожидать пользователи других операционных систем: cron доступен только для root или пользователей в cron.allow.

Обратите внимание, что идентификаторы пользователей в вашей системе, которые не отображаются в /etc/shadow, НЕ будут иметь рабочих crontab, если вы хотите ввести пользователя в /etc/passwd, но НЕ в /etc/shadow, crontab которого никогда не будет запущен. Поместите запись в /etc/shadow для пользователя с * для шифрования пароля, например:

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

В зависимости от выполняемых команд может потребоваться расширить переменную PATH для корневых пользователей, добавив следующую строку в начало корневого файла crontab:

crontab -e использует переменную окружения EDITOR. Чтобы изменить редактор на свой выбор, просто установите эту переменную. Вы можете установить EDITOR в вашем .bashrc, потому что многие команды используют эту переменную. Например, чтобы установить редактор nano (очень простой в использовании редактор), добавьте эту строку в .bashrc:

Разумно проверить, работают ли ваши задания cron должным образом. Один из способов сделать это — настроить выполнение задания на пару минут в будущем, а затем проверить результаты, прежде чем окончательно определить время. Вам также может быть полезно поместить команды в файлы сценариев, которые регистрируют их успех или неудачу, например:

Все изменения в пользовательском crontab и запущенные задания cron по умолчанию регистрируются в /var/log/syslog, и это первое место, где можно проверить, работает ли что-то не так, как вы ожидаете.

Если пользователю не было разрешено выполнять задания, когда его crontab последний раз редактировался, просто добавление его в список разрешений ничего не даст. Пользователь должен повторно отредактировать свой crontab после добавления в cron.allow, прежде чем его задания будут запущены.

Обратите внимание, что пользовательские crontab (включая корневой crontab) не указывают имя пользователя после полей даты/времени.Если вы случайно включите имя пользователя в пользовательский crontab, система попытается запустить имя пользователя как команду.

Задания Cron могут не выполняться с ожидаемой средой, в частности с PATH. Попробуйте использовать полные пути к файлам и программам, если они расположены не так, как вы ожидаете.

Символ «%» используется в качестве разделителя новой строки в командах cron. Если вам нужно передать этот символ в скрипт, вам нужно экранировать его как "\%".

Если у вас возникли проблемы с запуском приложения с графическим интерфейсом с помощью cron, см. раздел «Приложения с графическим интерфейсом» ниже.

Файлы crontab, о которых говорилось выше, являются пользовательскими crontab. Каждая из вышеперечисленных crontab связана с пользователем, даже корневая crontab, которая связана с пользователем root. Есть еще два типа crontab со следующим синтаксисом:

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

Первый тип выглядит следующим образом. Как упоминалось выше, anacron использует команду run-parts и каталоги /etc/cron.hourly, /etc/cron.weekly и /etc/cron.monthly. Однако сам anacron вызывается из файла /etc/crontab. Этот файл можно использовать для других команд cron, но, вероятно, не следует. Вот пример строки из вымышленного файла /etc/crontab:

Это запустит командный сценарий Расти от имени пользователя rusty из его домашнего каталога. Однако обычно в этот файл не добавляют команды. Хотя опытный пользователь должен знать об этом, не рекомендуется добавлять что-либо в /etc/crontab. Помимо всего прочего, это может вызвать проблему, если файл /etc/crontab затронут обновлениями! Расти может потерять командование.

Второй тип находится в каталоге /etc/cron.d. Этот каталог может содержать файлы crontab. Этот каталог часто используется пакетами, а файлы crontab позволяют связать пользователя с содержащимися в них командами.

Пример: вместо добавления строки в /etc/crontab, что, как известно Расти, является плохой идеей, он вполне может добавить в каталог /etc/cron.d файл с именем rusty, содержащий его строку cron выше. . На него не повлияют обновления, но это общеизвестное место.

Когда бы вы использовали эти альтернативные местоположения crontab? Что ж, на машине с одним пользователем или на общей машине, такой как сервер школы или колледжа, пользовательский crontab был бы подходящим способом. Но в большом ИТ-отделе, где за сервером могут следить несколько человек, каталог /etc/cron.d, пожалуй, лучшее место для установки crontabs — это центральная точка и экономия на их поиске!

Возможно, вам не нужно просматривать файлы /etc/crontab или /etc/cron.d, не говоря уже о редактировании их вручную. Но опытный пользователь, возможно, должен знать о них и о том, что устанавливаемые им пакеты могут использовать эти места для своих crontab.

Приложения с графическим интерфейсом можно запускать с помощью cronjobs. Это можно сделать, указав cron, какой дисплей использовать.

Часть env DISPLAY=:0 указывает cron использовать текущий дисплей (рабочий стол) для программы "gui_appname".

И если у вас несколько мониторов, не забудьте указать, на каком из них должна запускаться программа. Например, чтобы запустить его на первом экране (экране по умолчанию), используйте:

Часть env DISPLAY=:0.0 указывает cron использовать первый экран текущего дисплея для программы "gui_appname".

Примечание. Пользователи с графическим интерфейсом могут предпочесть использовать gnome-schedule (он же «Запланированные задачи») для настройки заданий cron с графическим интерфейсом. В gnome-schedule при редактировании задачи с графическим интерфейсом вы должны выбрать «X-приложение» в раскрывающемся списке рядом с полем команды.

Примечание. В Karmic (9.10) необходимо включить X ACL для локального хоста, к которому можно подключиться, чтобы приложения с графическим интерфейсом работали.

Ниже приведен пример настройки crontab для запуска updatedb, который обновляет базу данных slocate: Откройте терминал, введите «crontab -e» (без двойных кавычек) и нажмите клавишу ввода. Введите в редактор следующую строку, заменив полный путь приложения, которое вы хотите запустить, на показанный ниже:

Сохраните изменения и выйдите из редактора.

Crontab сообщит вам, если вы допустили какие-либо ошибки. Кронтаб будет установлен и начнет работать, если ошибок нет. Вот и все. Теперь у вас есть настройка cronjob для запуска updateb, который обновляет базу данных slocate каждое утро в 4:45.

Приведенный выше пример будет запускать chkrootkit, а затем updateb ежедневно в 4:45 — при условии, что у вас установлены все перечисленные приложения. Если chkrootkit выйдет из строя, updateb НЕ будет запущен.

В Ubuntu 9.10 (и, предположительно, в более поздних версиях) anacron настроен следующим образом:

Существует задача Upstart, расположенная в /etc/init/anacrontab.conf, которая запускает все задания в /etc/anacrontab. Он настроен на запуск при запуске.

Существует файл cron.d (/etc/cron.d/anacron), который запускает задачу Upstart каждый день в 7:30 утра.

Есть файл /etc/apm/event.d/anacron, который вызывает запуск задачи Upstart, когда ноутбук подключен к сети переменного тока или просыпается.

В системном crontab (/etc/crontab), если anacron не является исполняемым, run‑parts используется для запуска файлов в cron.daily, cron.weekly и cron.monthly в 6:25, 6: 47:00 и 6:52 соответственно.

В файле /etc/anacrontab run-parts используется для запуска cron.daily через 5 минут после запуска anacron, cron.weekly через 10 минут (раз в неделю) и cron.monthly через 15 минут (раз в месяц). .

В каталогах cron.daily, Weekly и Monthly ( /etc/cron.daily и т. д.) есть файл 0anacron, который устанавливает метки времени для anacron, поэтому он будет знать, что они были запущены, даже если это не так. не запускайте их.

Похоже, что anacron запускается при каждом запуске, пробуждении, подключаемом модуле и в 7:30 утра каждый день. Глядя на соответствующие журналы изменений и базы данных пакетов, похоже, что эта настройка взята непосредственно из Debian и не менялась по крайней мере с 2009 года.

Читайте также: