Запустить cron через браузер
Cron - это демон планирования, который выполняет задачи с заданными интервалами. Эти задачи называются заданиями cron и в основном используются для автоматизации обслуживания или администрирования системы.
Например, вы можете установить задание cron для автоматизации повторяющихся задач, таких как резервное копирование баз данных или данных, обновление системы последними обновлениями безопасности , проверка использования дискового пространства, отправка электронных писем, перезагрузка сервера и так далее. В некоторых приложениях, таких как Drupal или Magento, для выполнения определенных задач требуются задания cron.
Задания cron могут быть запланированы по минуте, часу, дню месяца, месяцу, дню недели или любой их комбинации.
ЧТО ТАКОЕ ФАЙЛ CRONTAB
Crontab (таблица cron) представляет собой текстовый файл, который определяет расписание заданий cron. Существует два типа файлов crontab. Общесистемные файлы crontab и отдельные пользовательские файлы crontab.
Файлы crontab пользователей именуются в соответствии с именем пользователя, и их расположение зависит от операционной системы. В дистрибутивах на основе Red Hat, таких как CentOS, файлы crontab хранятся в каталоге /var/spool/cron, а файлы Debian и Ubuntu хранятся в каталоге /var/spool/cron/crontabs.
Хотя вы можете редактировать пользовательские файлы crontab вручную, рекомендуется использовать команду crontab.
/etc/crontab и файлы в каталоге /etc/cron.d являются общесистемными файлами crontab, которые могут редактировать только системные администраторы.
В большинстве дистрибутивов Linux вы также можете помещать скрипты в каталоги /etc/cron., и скрипты будут выполняться каждый час/день/неделю/месяц.
СИНТАКСИС CRONTAB И ОПЕРАТОРЫ
Каждая строка в пользовательском файле crontab содержит шесть полей, разделенных пробелом, за которым следует команда для запуска.
* * * * * command(s)
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)
Первые пять полей могут содержать одно или несколько значений, разделенных запятой или диапазон значений, разделенных дефисом.
- * - оператор звездочки означает любое значение или всегда. Если в поле «Час» имеется символ звездочки, это означает, что задание будет выполняться каждый час.
- , - оператор запятой позволяет указать список значений для повторения. Например, если у вас есть 1,3,5 в поле Час, задание будет выполняться в 1, 3 и 5 часов утра.
- - - оператор дефиса позволяет указать диапазон значений. Если в поле «День недели» указано значение 1–5, задание будет выполняться каждый рабочий день (с понедельника по пятницу).
- / - оператор косой черты позволяет указать значения, которые будут повторяться в течение определенного интервала между ними. Например, если в поле «Час» указано */4, это означает, что действие будет выполняться каждые четыре часа. Это то же самое, что указание 0,4,8,12,16,20. Вместо звездочки перед оператором косой черты можно также использовать диапазон значений, 1-30/10 означает то же, что и 1,11,21.
ОБЩЕСИСТЕМНЫЕ ФАЙЛЫ CRONTAB
Синтаксис общесистемных файлов crontab немного отличается от пользовательских crontabs. Он содержит дополнительное обязательное поле пользователя, которое указывает, какой пользователь будет запускать задание cron.
ПРЕДОПРЕДЕЛЕННЫЕ МАКРОСЫ
Существует несколько специальных макросов расписания Cron, используемых для определения общих интервалов. Вы можете использовать эти ярлыки вместо указания даты в пять столбцов.
- @yearly (или @annually) - запускать задание один раз в год в полночь (12:00) 1 января. Эквивалент 0 0 1 1 *.
- @monthly - запускать заданное задание один раз в месяц в полночь первого дня месяца. Эквивалент 0 0 1 * *.
- @weekly - запускать задание раз в неделю в полночь воскресенья. Эквивалент 0 0 * * 0.
- @daily - запускать задание один раз в день в полночь. Эквивалент 0 0 * * *.
- @hourly - запускать заданную задачу один раз в час в начале часа. Эквивалент 0 * * * *.
- @reboot - Запустить указанное задание при запуске системы (время загрузки).
КОМАНДА CRONTAB
Команда crontab позволяет установить или открыть файл crontab для редактирования. Вы можете использовать команду crontab для просмотра, добавления, удаления или изменения заданий cron, используя следующие параметры:
- crontab -e - отредактировать файл crontab или создать его, если он еще не существует.
- crontab -l - Показать содержимое файла crontab.
- crontab -r - удалить текущий файл crontab.
- crontab -i - Удалить текущий файл crontab с запросом перед удалением.
- crontab -u - Изменить другой файл crontab. Требуются права системного администратора.
Команда crontab открывает файл crontab с помощью редактора, указанного в переменных окружения VISUAL или EDITOR.
Через браузер скрипт работает прекрасно. Дело именно в запуске через крон. Строка из крона тоже взята с другого сервера (debian), там работает.
Подскажите, пожалуйста, в чем дело?
А вы к своему сайту подключаетесь? Может быть нужно передать идентификатор через параметр wget'а --user-agent= ? Обращались в тех. поддержку сайта? Если запустить wget руками из консоли - что будет?
@МАН69К, да, к своему. К сожалению, тех.поддержка этим не занимается. Руками через консоль - тоже самое. По поводу идентификатора - можете привести пример? Просто не понял.
@МАН69К, имелось ввиду - тоже самое что и через крон. Добавил такую строку: wget --user-agent="Opera/9.80 (X11; Linux x86_64) Presto/2.12.388 Version/12.16" site.ru/main/cron/updateSystemLoad?token=TOKEN > /tmp/zxcron.log 2>&1 в итоге при выходе из редактора, ошибка: crontab: installing new crontab "/tmp/crontab.8jENaF/crontab":22: bad minute errors in crontab file, can't install. Do you want to retry the same edit? (y/n)
2 ответа 2
cron у вас занимается судя по вашему логу,далее прорамма wget делает запрос по указанному url адресу, но сервер не отдает данные по неизвестной причине (как вам сказали, возможно следует передать user agent). Ошибку сохранения вы получаете по причине неверного формата времени запуска - обратите внимание на звездочки и цифры вначале строки.
Если начнет работать, можно приступать ко правке cron так как по вашему комментарию видно что вы допустили в нем ошибку в 22 строке ("/tmp/crontab.8jENaF/crontab":22: bad minute errors in crontab file, can't install. Do you want to retry the same edit? (y/n))
Понимаете, я когда добавляю эту строку которую мне скинул МАН69К, у меня выходит ошибка. Как я могу дальше продолжить, если у меня ошибка?
Тогда ошибку нужно искать на стороне сервера. Скрипт updateSystemLoad. Запускается ли он вообще когда вы его вызываете через wget? Распечатать переменные сервера, командную строку .
понимаете, скрипт работает через браузер, мало того - он работает на другом сервере дебиан. Может ли дело быть в апаче? Просто у меня путь к файлу идет через поддомен. Хотя, на другом сервере (где работает) всё было так же.
Cron — один из часто используемых инструментов для Unix-систем. Его используют для планирования выполнения команд на определённое время. Эти «отложенные» команды или задания принято называть «Cron Jobs». Такой инструмент отлично подходит для регулярных бэкапов, мониторинга дискового пространства, удаления файлов (например, логов) и много чего ещё. В этой статье будет рассказано о работе с Cron на Linux.
Введение
Шаблон задания для Cron выглядит примерно так:
Вот иллюстрация этого же шаблона, которую можно сохранить себе:
Звёздочками обозначены конкретные блоки времени.
Для отображения содержимого crontab-файла текущего пользователя используйте команду:
Для редактирования заданий пользователя есть команда:
Если эта команда выполняется в первый раз, вам предложат выбрать редактор для Cron:
Выбирайте на своё усмотрение. Вот так изначально выглядит crontab-файл:
В этом файле как раз нужно перечислять одну за другой все команды.
Чтобы изменить crontab-файл другого пользователя (например, ostechnix):
Ниже приведены несколько примеров cron-заданий:
- Чтобы выполнять команду каждую минуту, задание должно быть такое:
- Похожее задание, только команда будет вызываться каждые пять минут:
- Вызывать команду 4 раза в час (каждые 15 минут):
- Чтобы выполнить команду каждый час в 30 минут, пишем:
Ещё существуют готовые задания:
- @reboot — одиночное выполнение команды при загрузке;
- @yearly — раз в год;
- @annually — тоже раз в год;
- @monthly — раз в месяц;
- @weekly — один раз в неделю;
- @daily — раз в день;
- @midnight — тоже раз в день;
- @hourly — раз в час.
Чтобы выполнять команду каждый раз после перезапуска сервера, используйте это задание:
Команда для очистки всех заданий текущего пользователя:
Чтобы узнать о подробностях, есть команда:
Вышеперечисленного уже должно хватить для базовой работы с Cron и составления заданий.
Синтаксис crontab-генераторов
Процесс написания заданий сильно упрощают веб-инструменты. Они не требуют знаний синтаксиса Cron, потому что у них графический интерфейс, а задания генерируются в соответствии с вводимыми данными. Сайт генерирует задание, которое можно будет просто скопировать и вставить в crontab-файл.
Crontab.guru
crontab.guru — отличный сайт, чтобы изучить различные примеры cron-заданий. Просто введите данные и сайт самостоятельно сгенерирует конечное задание.
Сайт Crontag buru
На сайте есть разделы, посвящённые примерам и советам.
Crontag Generator
Сайт Crontab Generator
Вот такое конечное выражение вы увидете на сайте:
Помимо этого, есть веб-инструмент «Crontab UI», который обеспечивает не только простоту создания crontab-заданий, но и безопасность. Вот статья, посвящённая этому инструменту.
Размещая сайт, мы желаем добиться бесперебойной работы без нашего участия.
Значит, требуется автоматизировать процессы, и тут на помощь приходит cron.
Cron - программа, демон для автоматического запуска программ и скриптов на сервере в необходимое время.
Crontab в панели управления Timeweb
Если ваш аккаунт оплачен, и вас не уличили в спам-рассылке, то раздел Crontab доступен и работоспособен:
Интерфейс Crontab в панели управления Timeweb дружелюбен и интуитивно понятен: даже начинающие пользователи, до этого не имевшие опыта работы с cron, легко разберутся в том, как создавать задачи. Создав задачу, вы сможете в автоматическом режиме делать бэкапы, рассылки, чистить кэш и выполнять другие типовые действия.
Crontab в панели управления Timeweb поможет любому пользователю автоматизировать свои задачи и достичь нужный ему результат.
После основной информации я расскажу о нюансах, которые важно учитывать при работе с cron.
В разделе Crontab создаются новые задачи. Для этого потребуется заполнить поля:
- Название . Это имя нашей задачи.
- Тип файла и путь до файла . В зависимости от того, на каком языке написан сценарий, выбираем тип файла и путь до него. Если в задаче запускается скрипт, требующий переменные веб-сервера, запуск напрямую через php-интерпретатор приводит к ошибкам. Поэтому в случае, когда Вы используете скрипт, работающий при запуске через адресную строку браузера, необходимо выбирать тип файла "HTTP-запрос" и указывать URL для запроса аналогично тому, как он указывается в адресной строке "ваш_сайт/путь/до/скрипта/script.php?параметр1=значение1&параметр2=значение2".
- Периодичность запуска . Популярные интервалы запуска выбираем из списка. Если необходим запуск в другое время, то используем продвинутые настройки. В отличие от консоли, в панели Timeweb время указывается в обратном порядке. Но каждый блок подписан, что помогает не запутаться.
Нюансы
Небольшие нюансы, о которых стоит помнить при работе с cron.
1. Cron работает, если аккаунт оплачен и нет ограничений.
Проверить статус можно создав файл с расширением php (например twtest.php) с кодом:
И обратившись к файлу в браузере.
В браузере увидите информацию:
uid=12345(login) gid=600(customers) groups=600(customers) - говорит о том, что cron и почта доступны
uid=12345(login) gid=600(customers) groups=601(newcustomers),600(customers),660(spammers) - пишем в поддержку
2. Файл, который запускаете, должен иметь права на чтение и исполнение (r+x).
По умолчанию файлы на хостинге создаются с правами 600. Поменять права на нужные можно по ssh командой:
3. Дабы не захламлять e-mail лишними письмами, настройте часто исполняемые скрипты на запись лога в файл , а не в консоль.
CRON по SSH
Настройка планировщика по ssh описана столько раз, что нового рассказать не получится.
Подключение по ssh подробно описано в справочном центре Timeweb:
После подключения, прочтите статью с информацией о командах ssh:
После прочтения надо найти файл со скриптом, перемещаясь между директориями командой cd. Найдя файл введите pwd и скопируйте путь (пример "/home/c/cc123456/public_html/test/")
Если не знаете какие права у файла введите:
При подключении по ssh редактировать задачи можно командой
В первый раз сервер попросит выбрать редактор:
Система указывает на простой редактор nano под цифрой 2. Если не рассчитали силы или случайно выбрали vi, не пугайтесь, нажмите Esc, затем введите двоеточие q и нажмите enter.
Для того, чтобы сменить редактор, введите команду:
и выберете nano.
Задания пишутся по строкам. Пример:
Значения первых пяти значений:
- 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, то задание будет запущено в 8 часов утра и в 23 часа вечера. Можно задать интервал: 9-18 будет означать, что программа запустится каждый час в период с 9 до 18 часов включительно. Символ '*' означает «все возможные значения». Например, указание '*' в поле «часы» будет означать «запускать каждый час». Символ '/' служит для указания дополнительной периодичности задания. Например, '*/3' в поле «минуты» означает «каждые три минуты».
Далее указываем путь до интерпретатора. На серверах Timeweb по умолчанию установлена версия php 5.3. Наш предполагаемый скрипт работает на 5.6. Указать требуемую версию php так:
Последняя запись указывает на путь до файла и название файла, который запускаем.
Нюансы
- При изменении в панели управления в разделе "Crontab" удалятся изменения записей сделанных по ssh!
- Если определены оба поля "день месяца" и "день недели" , то такое задание будет выполняться в каждый указанный день недели независимо от дня месяца. Например, следующая команда будет выполняться в 9 часов 19 минут каждую среду и каждое 7 число месяца, даже если 7 число не совпадает со средой.
Частные случаи
Для запуска задачи чаще, чем раз в минуту, используем sleep.
Для этого пишем в crontab:
для запуска файла каждые 30 секунд.
Иногда при использовании планировщика запуска программ cron неизвестно, сколько длится выполнение скрипта. Для избежания двойного запуска скрипта требуется проверка на завершение предыдущего запуска скрипта.
Маэстро из отдела инженеров рассказал, как решить задачу.
Для начала создаём sh скрипт в файл /home/c/cc123456/tmp/twtest.sh:
В панели управления в разделе crontab выбираем тип "Исполняемый бинарный файл".
В поле “Полный путь” пишем:
- /home/c/cc123456/tmp/twtest.sh - наш скрипт проверки
- /opt/php56/bin/php - путь до нужного интерпретатора
- /home/c/cc123456/tmp/twtest.php - путь до нашего скрипта
Указываем необходимое время запуска и придумываем название.
Заключение
Теперь вы знаете, как работать с cron и автоматически запускать задачи. Более подробную информацию о cron ищите в "man cron". Удачи!
Разбираемся с тем, что представляет собой Cron, как он работает и зачем нужен. Пытаемся обуздать его параметры, чтобы планировать задачи на своем сервере без лишних затрат сил и времени.
Что такое Cron и crontab?
Если в двух словах, то Cron – это планировщик задач. Если подробнее, то это утилита, позволяющая выполнять скрипты на сервере в назначенное время с заранее определенной периодичностью.
К примеру, у вас есть скрипт, который собирает какие-либо статистические данные каждый день в 6 часов вечера. Такие скрипты называют «заданиями», а их логика описывается в специальных файлах под названием сrontab.
crontab – это таблица с расписанием запуска скриптов и программ, оформленная в специальном формате, который умеет считывать компьютер. Для каждого пользователя системы создается отдельный crontab-файл со своим расписанием. Эта встроенная в Linux утилита доступна на низком уровне в каждом дистрибутиве.
В Linux-дистрибутивах с поддержкой systemd Cron считается устаревшим решением, его заменили утилитой systemd.timer. Ее предназначение и функциональность не отличается, но фактически частота использования Cron все еще выше.
Для чего обычно используют Cron?
Обычно Cron заставляют повторять вполне очевидные задачи в духе регулярного создания резервных копий данных. Но это не все.
С помощью Cron пользователи автоматизируют самые разные задачи, сокращая вмешательство системного администратора в работу сервера.
Базовые принципы работы с Cron и crontab (через панель управления)
Многие хостинг-провайдеры предлагают отдельное меню в панели управления для настройки расписания запланированного выполнения скриптов.
Разберем подобное меню на примере панели управления Timeweb. Чтобы создать новую задачу, необходимо открыть раздел Crontab в боковой панели веб-интерфейса, кликнуть по кнопке «Добавить новую задачу» и указать параметры повторяющейся команды. Поговорим подробнее о параметрах.
На этом все. Скрипт запланирован и будет регулярно повторяться.
Базовые принципы работы с Cron и crontab (через SSH-протокол)
Планировать задачи через панель управления удобно, но не всегда возможно. Не все хостинг-провайдеры предлагают такие функциональные веб-интерфейсы. В этом случае придется воспользоваться командной строкой, подключившись к серверу по протоколу Secure Shell.
Для работы с планировщиком в системе есть ряд команд, помогающих решать основные задачи:
- crontab -e – открывает конфигурационный файл (поговорим о нем чуть подробнее в разделе с первичной настройкой).
- crontab -l – показывает список задач из конфигурационного файла (все, что было запланировано).
- crontab -r – удаляет конфигурационный файл вместе со всеми запланированными задачами.
- сrontab -v – показывает, когда в последний раз открывался конфигурационный файл.
Чтобы запланировать задачи, используя командную строку, необходимо выполнить базовую настройку Cron, проверить, не установлены ли ограничения, и заполнить расписание задач в соответствии с синтаксисом сrontab.
Первичная настройка Cron
Как мы уже выяснили ранее, планировщик черпает параметры для выполнения своих задач из crontab-файлов (таблиц с расписанием). У каждого пользователя, включая root, должен быть свой crontab-файл. По умолчанию он не существуют, поэтому придется создать его вручную.
Для этого существует команда crontab -e. Она автоматически генерирует таблицу в директории /var/spool/cron.
Вновь созданный файл будет пустым текстовым полем. Необходимо добавлять в него все параметры самостоятельно с нуля, опираясь на синтаксис сrontab (более подробно поговорим о нем ниже). После ввода параметров нужно сохранить параметры редактора, нажав на клавишу F2, а затем покинуть конфигурационный файл, нажав на клавишу F10. При введении корректных параметров в терминале отобразится строка crontab: installing new crontab.
Опытные разработчики и системные администраторы не рекомендуют использовать для редактирования расписания текстовые редакторы в духе Nano, Emacs или Vi. Команды crontab позволяют не только внести изменения в таблицу запланированных задач, но и перезапустить фоновый процесс crond, отвечающий за работу утилиты после сохранения настроек.
Ограничения Cron
У Cron есть функция установки ограничений на использование, задающихся через два специальных файла: cron.allow и cron.deny.
Первый файл находится в директории /usr/lib/cron/cron.allow и содержит в себе список учетных записей (имен пользователей), которые имеют право на планирование задач с помощью встроенных системных утилит.
Второй файл находится в директории /usr/lib/cron/cron.deny. В нем указываются имена пользователей, которые не могут запускать встроенный в систему планировщик задач.
Если первого файла не существует, то любой пользователь может планировать задачи с помощью встроенного в систему планировщика, но только при условии, что его имени нет во втором файле. Если удалить оба файла, то каждый пользователь сможет планировать задачи без ограничений.
Синтаксис crontab
Первые три линии кода в таблице отвечают за первичную настройку. Сначала указывается оболочка, в которой будет работать Cron. У утилиты нет каких-либо предпочтений, поэтому можно указать любую на собственное усмотрение (в нашем примере это bash). Затем указывается адрес электронный почты, на который будут отправляться отчеты о работе планировщика. И напоследок указывается путь к окружению.
Ниже находятся параметры, используемые для запуска процессов в определенный период времени. В комментариях описан базовый синтаксис, включающий в себя формат времени, имя пользователя и команду, которая должна быть запущена.
В нашем случае указаны команды:
Примеры использования Cron в командной строке
создает в таблице расписания задачу на запуск скрипта под названием bckp (представим, что такой существует), который создает резервную копию всей системы на стороннем накопителе. Он выполняется 5 числа каждого месяца в 4 часа 2 минуты утра. Это видно по числовым значениям. Звездочки же указывают на отсутствие конкретного значения. Cron воспринимает их как «выполнять каждый раз», то есть каждый месяц, день или неделю.
меняет время аппаратного обеспечения на то, что используется в системе. Делает это каждый день, каждую неделю и каждый месяц в 6 часов 4 минуты утра. Как видите, здесь пропущено третье значение. Поэтому команда и запускается ежедневно, так как нет более конкретных правил.
запускает обновление пакетов с помощью пакетного менеджера apt каждый месяц 5 числа в 05:10.
удаляет содержимое папки с временными файлами для конкретного пользователя (меня) на пятой минуте (первый пункт) каждого часа. Так как определенные значения отсутствуют для всех остальных пунктов, получается, что скрипт готов выполняться каждый день, каждый месяц и каждый час. Но первое значение указано, поэтому он будет дожидаться пятой минуты и запускаться в этот момент. То есть в 12:05, 13:05, 14:05 и т.п.
Как видите, разобраться с базовыми командами несложно.
Другие примеры настройки Cron
На примере команды для удаления временных файлов разберем пару-тройку нестандартных настроек расписания.
К примеру, некоторые показатели можно вводить не в виде цифр, а в виде сокращенных слов. Чтобы запускать удаление временных файлов каждую пятницу в 4 часа вечера, необходимо ввести в crontab:
Если не указывать в планировщике точных вводных, то выбранный скрипт будет выполняться каждую минуту:
Можно заставить планировщик выполнять задачу только в определенные месяцы. Чтобы запускать удаление временных файлов 1 февраля, 1 мая и 1 сентября в половину первого ночи, необходимо ввести в crontab:
Некоторые скрипты необходимо выполнять только по будням, поэтому в Cron есть возможность исключить некоторые дни недели из расписания:
Часы тоже можно делить. Например, запускать ту или иную задачу каждые 3 часа. Для этого нужно поставить слэш в графе с установкой времени по часам:
Вместо заключения
О работе с Cron стоит знать еще пару важных вещей.
Во-первых, всегда указывайте корректный почтовый адрес в параметрах. Это позволит собирать информацию о запускаемых по расписанию задачах. В этих письмах содержится и информация о возникающих ошибках. Во-вторых, при указании «исполнителя» в панели управления Timeweb важно делать корректный выбор, чтобы он соответствовал запускаемой задаче. В-третьих, информацию о работе Cron можно собирать в отдельный файл с помощью команд в духе:
На этом все. Следуйте инструкциям, не путайте порядок параметров и внимательно изучайте журнал ошибок, если что-то пойдет не так. После недолгой практики вы поймете, что работать с Cron не так уж и сложно!
Читайте также: