Использование планировщика cron в Linux. Cron - точно по расписанию Что такое крон php
Cron - это планировщик заданий, который работает на Unix\Linux хостинге. Он позволяет автоматически выполнять определенные действия на сервере (запуск программ, скриптов и т.д.), с заданным временем или периодичностью.
Правильная настройка планировщика заданий Cron
Задания для Cron можно описать так - это несколько строк (одна строка - одно задание), в которых указывается периодичность запуска и команда (которая означает, что собственно нужно запустить):
30 3 * * 2 /yourdirectory/myscript.pl
Схематично:
Минуты Часы ДеньМесяца Месяц ДеньНедели Команда
Минуты - задается числом от 0 до 59
Часы - задается числом от 0 до 23
ДеньМесяца - задается числом от 1 до 31
Месяц - задается числом от 1 до 12
ДеньНедели - 1 - Понедельник, 2 - Вторник, 3 - Среда, 4 - Четверг, 5 - пятница, 6 - Суббота, 7 - Воскресенье
Таким образом в нашем примере (30 3 * * 2 /yourdirectory/myscript.pl) задние означает, что нужно каждый вторник, в 3 часа 30 минут ночи запускать файл /yourdirectory/myscript.pl
Также в каждом из полей мы можем использовать:
Написание через запятую : 2,5,16 - если написать такое в поле Часы, то задание будет запускаться в 2 часа ночи, в 5 часов утра и в 16 часов.
Интервал : 5-9 - если написать в это в поле Минуты, то задание будет запускаться каждую минуту в период с 5 по 9 мин.
Дополнительная периодичность : /4 - если написать такое в поле часы, то это будет означать что запуск будет происходить каждые 4 часа.
Важно! Звездочка (*) - означает все возможные значения! Таким образом, неопытный вебмастер который решит, что для запуска задания 1 числа каждого месяца достаточно написать * * 1 * * /yourdirectory/myscript.pl натыкается на то, что задание будет запускаться каждую минуту, в каждом часу.
Как и куда вводить Cron-задания?
Первый способ работы с Cron - это панель управления хостингом. Но в разных панелях настройка и управление осуществляются по разному:
cPanel: Панель управления -> Задания Cron
ISP Manager: Панель управления -> Планировщик (Cron)
Parallels Plesk: Панель управления -> Запланированные задачи
Если у вашего хостинг-провайдера нет возможности работать с заданиями через панель управления, то вся работа с Cron обычно производится через SSH-протокол. Здесь все просто - подключаетесь к серверу по SSH и вводите команды. Для подключения к серверу используют бесплатную программу PuTTY (как настроить), а команды вводят в командной строке.
Чтобы начать работу вводим команду
После этого вас скорее всего перебросит в текстовый редактор vi (у разных провайдеров могут быть разные редакторы). vi - это достаточно сложный редактор, поэтому рекомендуем вам попробовать ввести строчку
Если запустится более легкий редактор, то все отлично, если же ваш хостинг-провайдер его не поддерживает, то Google поможет разобраться с vi. Мы лишь кратко обозначим основные моменты:
Ввод текста - жмем клавишу i и редактор перейдет в режим ввода текста;
выйти из режима ввода текста - Esc
Удалить символ - x (если вы находитесь в режиме ввода теста, то чтобы удалить символ сначала нажмите Esc, а потом x);
Важно! Вводя задания для Cron после каждой строчки нужно обязательно нажимать Enter, даже если эта строчка единственная.
Чтобы посмотреть уже существующие задания для Cron вводим crontab -l
Задания для Cron с полезными примерами
Правила составления Cron-заданий смотрим . Запускать задание каждые 2 часа в 0 минут (каждый день, каждого месяца)
0 */2 * * * /yourdirectory/myscript.pl
Запускать задание каждый раз после перезагрузки сервера
@reboot /yourdirectory/myscript.pl
Запускать задание по средам в 3 часа 20 минут ночи (каждый день, каждого месяца)
20 3 * * 3 /yourdirectory/myscript.pl
1 0 14 3 * /yourdirectory/myscript.pl
Запускать задание ежемесячно 1 числа в 3 часа 15 минут ночи (в каждом месяце)
15 3 1 * * /yourdirectory/myscript.pl
Запуск PHP-файлов по расписанию с помощью Cron
Для запуска PHP-скриптов через Cron можно использовать специальный интерпретатор. К сожалению мы не можем дать вам инструкцию по его работе, т.к. у разных провайдеров может использовать разный софт. Поэтому многие вебмастера запускают PHP-файлы с помощью WGET, для этого используем такую запись в crontab:
30 3 * * 2 root wget -O - -q -t 1 http://mysite.com/file.php
"-O -" означает, что Cron не будет создавать лишние файлы, а будет работать через консоль. Это позволяет избежать захламления сервера.
"-q" отключает вывод операции на экран
"-t 1" разрешается только одна попытка соединения.
http://mysite.com/file.php - путь к вашему PHP-фалу (не обязательно указывать абсолютный путь).
Важно! Если вы будете передавать параметры с помощью этого PHP-файла, то бывают случаи когда WGET не совсем корректно их обрабатывает. В таком случае рекомендуем взять адрес PHP-файла в одинарные кавычки:
30 3 * * 2 root wget -O - -q -t 1 "http://mysite.com/file.php"
Также, существует еще один способ запуска:
30 3 * * 2 /usr/bin/wget -O - -q -t 1 http://mysite.com/file.php
Но в этом случае вам нужно знать путь к папке wget на своем сервере (чаще всего /usr/bin/wget или /usr/local/bin/wget).
Получение отчета о работе Cron на почту
Cron можно настроить так, чтобы на электронную почту приходили сообщения с результатами запущенных заданий. Эта функция также может быть полезна, для уведомления на случай ошибки. Для получения отчета на e-mail нужно редактируя crontab (перед заданиями) написать такую строку:
где [email protected] - это e-mail на который будут приходить письма. Также можно добавить несколько адресов, через запятую.
Есть еще один момент, вам на почту будет приходить еще и результат работы скрипта. например, если скрипт пишет на экране какую-то надпись, то эта же надпись придет на вашу почту вместе с отчетом. Если это вас раздражает, то добавьте в конце задания строку > /dev/null 2>&1
30 3 * * 2 /usr/bin/wget -O - -q -t 1 http://mysite.com/file.php > /dev/null 2>&1
, | |
На сегодня Cron является одним из наиболее распространенных способов автоматизации запуска процессов в Linux. Cron – это демон, который работает в фоновом режиме и позволяет планировать и автоматизировать запуск различных (в том числе и связанных с поддержкой сервера) задач. Для этого используется конфигурационный файл кронтаб (crontab).
Установка Cron
На данный момент почти все дистрибутивы поставляются с уже установленным по умолчанию демоном cron. Если же cron не установлен по умолчанию, его можно быстро установить при помощи следующих команд:
Ubuntu/Debian:
sudo apt-get update
sudo apt-get install cron
Cent OS/Red Hat Linux:
sudo yum update
sudo yum install vixie-cron crontabs
После завершения установки необходимо убедиться в том, что cron запущен в фоновом режиме:
sudo /sbin/chkconfig crond on
sudo /sbin/service crond start
Базовый синтаксис
Рассмотрим следующий пример задачи, запуск которой нужно спланировать:
5 * * * * curl http://www.google.com
Синтаксис планирования различных задач сначала может показаться запутанным. На самом деле он очень краток и прост, нужно просто разобраться, как его читать. Каждая строка делится на график и команду. В строку можно внести практически любую команду. График делится на 5 различных полей для планирования в следующем порядке:
<Минуты> <Часы> <Дни_месяца> <Месяцы> <Дни_недели>
Примеры использования cron
Данный раздел содержит примеры планирования наиболее общих задач.
Чтобы команда автоматически выполнялась каждую минуту:
Чтобы команда выполнялась каждую двенадцатую минуту часа (08.12, 09.12, и т.д.):
Чтобы команда запускалась каждые 15 минут:
0,15,30,45 * * * *
Чтобы команда автоматически выполнялась каждый день в 4 утра:
Чтобы команда выполнялась каждый вторник в 4 утра:
График можно делить. То есть, вместо 0,15,30,45 можно использовать:
Обратите внимание на диапазон 2-6. Данный синтаксис будет запускать указанную команду с 2.00 до 6.00 утра каждые 15 минут.
Как видите, чрезвычайно мощный и гибкий синтаксис cron позволяет указать практически любой интервал времени.
Настройка cron
Разработав график выполнения задач, необходимо поместить его в правильной точке системы, чтобы демон мог найти и прочесть его. В целом, таких точек в системе несколько, но, как правило, такой график помещают в crontab пользователя. Как уже говорилось, crontab – это конфигурационный файл демона cron, который содержит график запуска определенных команд и программ. Этот файл находится в /var/spool/cron/crontab, но его не принято редактировать напрямую. Для внесения в файл нужных программ используется одноименная команда – crontab. То есть, чтобы отредактировать файл crontab, можно просто ввести:
Эта команда откроет текстовый редактор, при помощи которого можно внести все необходимые изменения; каждую новую задачу нужно вносить в новую строку.
Чтобы просмотреть crontab, не внося никаких изменений, используйте команду:
Очистить crontab можно с помощью следующей команды:
Пользователь с повышенными привилегиями может редактировать crontab других пользователей при помощи:
crontab -u <пользователь> -e
Вывод cron
После выполнения задачи cron отправляет выходные данные на электронный адрес пользователя (если только вывод не нужно направить в лог или /dev/null). Адрес электронной почты можно указать вручную, внеся параметр MAILTO в верхнюю часть crontab. Также можно указать оболочку, которую нужно запускать, путь к двоичному файлу cron и домашнему каталогу. Для этого:
сначала откройте crontab:
затем отредактируйте его следующим образом:
SHELL=/bin/bash
HOME=/
MAILTO=”example@some_user.com”
#This is a comment
* * * * * echo ‘Run this command every minute’
Данная строка вернет Run this command every minute. Демон cron будет отправлять такой вывод на почту example@some_user.com. Это, конечно, не очень удобно. Как уже говорилось ранее, данный вывод можно направлять в лог-файл, чтобы избежать подобных ситуаций.
Для этого нужно просто добавить:
* * * * * echo ‘Run this command every minute’ >> file.log
Примечание: символы >> направят вывод в лог. Кроме логов можно также использовать /dev/null при помощи следующего PHP-скрипта, работающего в фоновом режиме.
* * * * * /usr/bin/php /var/www/domain.com/backup.php > /dev/null 2>&1
Ограничение доступа к cron
Чтобы ограничить доступ к демону cron, нужно использовать файлы /etc/cron.allow и /etc/cron.deny. чтобы открыть (allow) или закрыть (deny) доступ определенному пользователю, нужно просто внести имя пользователя в соответствующий файл. По умолчанию демон cron доступен всем пользователям. Чтобы запретить доступ всем пользователям и предоставить доступ только пользователю example, нужно использовать следующую последовательность команд.
Системным администраторам, да и обычным пользователям часто приходится автоматизировать различные задачи по обслуживанию и работе с Linux с помощью скриптов. Это очень удобно, вы просто запускаете скрипт, и он делает все что необходимо без вашего вмешательства. Следующий шаг в этом пути - настроить автоматически запуск нужного скрипта в нужное время.
Именно для этих задач в Linux используется системный сервис cron. Это планировщик, который позволяет выполнять нужные вам скрипты раз в час, раз в день, неделю или месяц, а также в любое заданное вами время или через любой интервал. Программа часто используется даже другими службами операционной системы. В этой статье мы рассмотрим как выполняется настройка Cron и разберем основные часто используемые примеры.
Фактически, Cron - это сервис, как и большинство других сервисов Linux, он запускается при старте системы и работает в фоновом режиме. Его основная задача выполнять нужные процессы в нужное время. Существует несколько конфигурационных файлов, из которых он берет информацию о том что и когда нужно выполнять. Сервис открывает файл /etc/crontab, в котором указаны все нужные данные. Часто, в современных дистрибутивах там прописан запуск утилиты run-parts, которая запускает нужные скрипты из следующих папок:
- /etc/cron.minutely - каждую минуту;
- /etc/cron.hourly - каждый час;
- /etc/cron.daily - каждый день;
- /etc/cron.weekly - каждую неделю;
- /etc/cron.monthly - каждый месяц.
В этих папках должны находиться скрипты, которые нужно выполнять с указанным интервалом. Скрипты должны иметь права на выполнение и их имя не должно содержать точки. Это очень сильно облегчает работу с планировщиком для новых пользователей. Также в файле crontab прописан запуск команды anacron, которая работает так же как и cron, только предназначена для задач, которые нужно выполнять раз в длительный период, например, раз в день, неделю, месяц, год.
Она позволяет выполнять их даже если компьютер работает не всегда и время от времени выключается. Дата выполнения задания последний раз записывается в файл /var/spool/anacron, а затем, при следующем запуске anacron проверяет был ли запущен нужный процесс в нужное время, и если нет, то запускает его. Сам же сервис cron больше рассчитан на выполнение задач в течение дня или с точно расписанным временем и датой.
Настройка Cron
Для настройки времени, даты и интервала когда нужно выполнять задание используется специальный синтаксис файла cron и специальная команда. Конечно, вы всегда можете отредактировать файл /etc/crontab, но этого делать не рекомендуется. Вместо этого, есть команда crontab:
Ее всегда желательно выполнять с опцией -e, тогда для редактирования правил будет использован ваш текстовый редактор по умолчанию. Команда открывает вам временный файл, в котором уже представлены все текущие правила cron и вы можете добавить новые. После завершения работы команды cron файл будет обработан и все правила будут добавлены в /var/spool/cron/crontabs/имя_пользователя причем добавленные процессы будут запускаться именно от того пользователя, от которого вы их добавляли.
Поэтому тут нужно быть аккуратным, и если вам нужно выполнять скрипты от рута, то и crontab нужно выполнить от рута, а не от пользователя. Это часто становиться причиной проблем.
Синтаксис crontab
Как я уже говорил, время задается особым синтаксисом, давайте рассмотрим синтаксис настройки одной задачи cron:
минута час день месяц день_недели /путь/к/исполняемому/файлу
Нужно сказать, что обязательно нужно писать полный путь к команде, потому что для команд, запускаемых от имени cron переменная среды PATH будет отличаться, и сервис просто не сможет найти вашу команду. Это вторая самая распространенная причина проблем с Cron. Дата и время указываются с помощью цифр или символа "*". Этот символ означает, что нужно выполнять каждый раз, если в первом поле - то каждую минуту и так далее. Ну а теперь перейдем к примерам.
Примеры настройки cron
Сначала можно посмотреть задачи cron для суперпользователя, для этого можно воспользоваться опцией -l:
Вы можете удалить все существующие задачи командой -r:
Давайте предположим, что нам нужно запускать от имени суперпользователя наш скрипт по адресу /usr/local/bin/serve. Какой-нибудь обслуживающий скрипт. Самый простой пример - запускать его каждую минуту:
* * * * * /usr/local/bin/serve
0 * * * * /usr/local/bin/serve
Запускаем в нулевую минуту нулевого часа, каждый день, это в 12 ночи:
0 0 * * * /usr/local/bin/serve
0 0 1 * * /usr/local/bin/serve
Можно в любой день, например, 15 числа:
0 0 15 * * /usr/local/bin/serve
В первый день недели первого месяца года, 0 часов 0 минут:
0 0 * 1 0 /usr/local/bin/serve
Или в нулевой день недели каждого месяца:
0 0 * * 0 /usr/local/bin/serve
Вы можете выбрать любую минуту, час и день недели, например, 15.30 во вторник:
30 15 * * 2 /usr/local/bin/serve
Понедельник считается первым днем, воскресенье - это седьмой или нулевой день. Еще можно писать сокращенное название дня недели, например sun - воскресенье:
30 15 * * sun /usr/local/bin/serve
Для того чтобы указать определенный интервал нужно использовать символ "-", например, каждый час, с семи утра до семи вечера:
0 7-19 * * * /usr/local/bin/serve
Если нужно запустить команду несколько раз, можно использовать разделитель ",". Например, запустим скрипт в 5 и 35 минут пятого (16:05 и 16:35), каждый день:
5,35 16 * * * /usr/local/bin/serve
Вы можете захотеть не указывать отдельно время, а просто указать интервал, с которым нужно запускать скрипт, например, раз в 10 минут. Для этого используется разделитель косая черта - "/":
*/10 * * * * /usr/local/bin/serve
Кроме того, для некоторых часто используемых наборов были придуманы переменные, вот они:
- @reboot - при загрузке, только один раз;
- @yearly, @annually - раз год;
- @monthly - раз в месяц;
- @weekly - раз в неделю;
- @daily, @midnight - каждый день;
- @hourly - каждый час.
Например, вот так просто будет выглядеть команда запуска скрипта раз в час:
@hourly /usr/local/bin/serve
Если же вы собрались добавить скрипт в одну из папок, то, как я уже говорил, нужно чтобы его имя было без точек и у него были права на выполнение:
sudo vi /etc/corn.daily/basckup
Скрипт должен выглядеть подобным образом. Теперь вы знаете как настроить cron, осталось проверить как все работает.
Отладка работы
После того как вы настроили правила, еще хотелось бы проверить работают ли они. Для этого ждем того времени, когда скрипт уже должен быть выполнен и смотрим лог cron. Иногда он находится в /var/log/cron, а иногда пишется в syslog. Например, у меня в crontab есть такая строка:
Она должна выполняться в 19.40 каждый день, теперь смотрим лог:
grep CRON /var/log/syslog
И видим что в нашем логе она действительно есть и выполняется целиком успешно. Если бы были какие-либо ошибки, то тут же было бы выведено сообщение.
Если нужно проверить скрипт, который находится в одной из специализированных папок, то тут еще проще, просто запустите run-paths, передав ей в параметр нужную папку или даже сам скрипт:
sudo run-paths /etc/cron.daily/
Выводы
В этой статье мы рассмотрели как выполняется настройка cron для удобного планирования автоматических задач. Надеюсь, эта информация была полезной для вас.
Введение
Размещая сайт, мы желаем добиться бесперебойной работы без нашего участия.
Значит, требуется автоматизировать процессы, и тут на помощь приходит cron.
Cron - программа, демон для автоматического запуска программ и скриптов на сервере в необходимое время.
Crontab в панели управления Timeweb
Если ваш аккаунт оплачен, и вас не уличили в спам-рассылке, то раздел Crontab доступен и работоспособен:
Интерфейс Crontab в панели управления Timeweb дружелюбен и интуитивно понятен: даже начинающие пользователи, до этого не имевшие опыта работы с cron, легко разберутся в том, как создавать задачи. Создав задачу, вы сможете в автоматическом режиме делать бэкапы, рассылки, чистить кэш и выполнять другие типовые действия.
Crontab в панели управления Timeweb поможет любому пользователю автоматизировать свои задачи и достичь нужный ему результат.
После основной информации я расскажу о нюансах, которые важно учитывать при работе с cron.
В разделе Crontab создаются новые задачи. Для этого потребуется заполнить поля:
- Название . Это имя нашей задачи.
- Тип файла и путь до файла . В зависимости от того, на каком языке написан сценарий, выбираем тип файла и путь до него. Если в задаче запускается скрипт, требующий переменные веб-сервера, запуск напрямую через php-интерпретатор приводит к ошибкам. Поэтому в случае, когда Вы используете скрипт, работающий при запуске через адресную строку браузера, необходимо выбирать тип файла "HTTP-запрос" и указывать URL для запроса аналогично тому, как он указывается в адресной строке "ваш_сайт/путь/до/скрипта/script.php?параметр1=значение1&параметр2=значение2".
При необходимости указывайте один ящик администратора в разделе Crontab. На этот ящик будут приходить сообщения в том случае, если бы при запуске скрипта в консоли появилось бы сообщение.
Нюансы
Небольшие нюансы, о которых стоит помнить при работе с 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 командой:
Chmod 744 twtest.php
или в Файловом менеджере, об этом у Timeweb есть инструкция:
3. Дабы не захламлять e-mail лишними письмами, настройте часто исполняемые скрипты на запись лога в файл , а не в консоль.
CRON по SSH
Настройка планировщика по ssh описана столько раз, что нового рассказать не получится.
Подключение по ssh подробно описано в справочном центре Timeweb:
После прочтения надо найти файл со скриптом, перемещаясь между директориями командой cd. Найдя файл введите pwd и скопируйте путь (пример "/home/c/cc123456/public_html/test/")
Если не знаете какие права у файла введите:
Chmod 744 имя_файла
При подключении по ssh редактировать задачи можно командой
Crontab -e
В первый раз сервер попросит выбрать редактор:
Select an editor. To change later, run "select-editor". 1. /bin/ed 2. /bin/nano <---- easiest 3. /usr/bin/mcedit 4. /usr/bin/vim.basic 5. /usr/bin/vim.tiny Choose 1-5 :
Система указывает на простой редактор nano под цифрой 2. Если не рассчитали силы или случайно выбрали vi, не пугайтесь, нажмите Esc, затем введите двоеточие q и нажмите enter.
Для того, чтобы сменить редактор, введите команду:
Select-editor
и выберете nano.
Задания пишутся по строкам. Пример:
1 2 3 4 5 /opt/php56/bin/php /home/с/сс123456/public_html/twtest.php
Значения первых пяти значений:
- 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" в поле «минуты» означает «каждые три минуты».
"/opt/php*/bin/php" где php*/ = php53/ php5.3/ php54/ php5.4/ php56/ php5.6/ php70/ php7.0/ php71/ php7.1/
Последняя запись указывает на путь до файла и название файла, который запускаем.
Нюансы
- При изменении в панели управления в разделе "Crontab" удалятся изменения записей сделанных по ssh!
- Если определены оба поля "день месяца" и "день недели" , то такое задание будет выполняться в каждый указанный день недели независимо от дня месяца. Например, следующая команда будет выполняться в 9 часов 19 минут каждую среду и каждое 7 число месяца, даже если 7 число не совпадает со средой.
19 9 7 * 3 /opt/php56/bin/phpn /home/с/сс123456/public_html/twtest.php
Частные случаи
Для запуска задачи чаще, чем раз в минуту, используем sleep.
Для этого пишем в crontab:
* * * * * /opt/php56/bin/php /home/k/konoplev/tmp/twtest.php; /bin/sleep 30; /opt/php56/bin/php /home/k/konoplev/tmp/twtest.php
для запуска файла каждые 30 секунд.
Иногда при использовании планировщика запуска программ cron неизвестно, сколько длится выполнение скрипта. Для избежания двойного запуска скрипта требуется проверка на завершение предыдущего запуска скрипта.
Логичным вариантом будет создание lock файла и при запуске скрипта проверять наличие файла. Но на хостинге Timeweb, как и на других хостингах, присутствует ограничение по процессору. Скрипт зависит от условий и времени выполнения, а значит, мы не можем предугадать время выполнения скрипта. Если скрипт выполнится с нарушением правил и ограничений ( ), то процесс завершится со стороны хостинга. Тогда lock файл не будет удален, а значит, и скрипт не будет запускаться по крону, пока файл не будет удалён.
Маэстро из отдела инженеров рассказал, как решить задачу.
Для начала создаём sh скрипт в файл /home/c/cc123456/tmp/twtest.sh:
#!/bin/bash command=$@ no_spaces=`echo $command | sed -e "s/\s/_/g" -e "s|/|_|g"` pidfile=/var/tmp/$no_spaces.pid lockfile=/var/tmp/$no_spaces.lock if [[ -e $pidfile ]] then pid=`cat $pidfile 2>/dev/null` ps h $pid >/dev/null 2>/dev/null if [[ $? -eq 0 ]] then exit 1 else rm $lockfile fi fi echo $$ > $pidfile /usr/bin/flock -w 0 $lockfile $command rm $pidfile
В панели управления в разделе crontab выбираем тип "Исполняемый бинарный файл".
В поле “Полный путь” пишем:
/home/c/cc123456/tmp/twtest.sh /opt/php56/bin/php /home/c/cc123456/tmp/twtest.php
Где
- /home/c/cc123456/tmp/twtest.sh - наш скрипт проверки
- /opt/php56/bin/php - путь до нужного интерпретатора
- /home/c/cc123456/tmp/twtest.php - путь до нашего скрипта
Указываем необходимое время запуска и придумываем название.
Заключение
Теперь вы знаете, как работать с cron и автоматически запускать задачи. Более подробную информацию о cron ищите в "man cron". Удачи!
cron – программа-демон, предназначенная для выполнения заданий в определенное время, или через определенные промежутки времени. Для редактирования заданий используется утилита crontab .
Листинг
Нельзя изменять файл расписания, просто открыв его в текстовом редакторе. Для его редактирования необходимо использовать команду crontab -e .
Простой пример файла расписания. Создание снимка экрана каждый час:
SHELL =/ bin/ bash MAILTO =username 0 * * * * scrotОсновные настройки
Выбор среды для исполняемых задач:
SHELL =/ bin/ bashИмя пользователя, которому будет послано сообщение о выполнении задания:
MAILTO =usernameВместо имени, также можно использовать электронный адрес:
MAILTO =example@ example.orgНе обязательные настройки
Задаем каталог пользователя:
HOME =Задаем каталоги исполняемых фалов:
PATH =/ sbin:/ bin:/ usr/ sbin:/ usr/ binПрописываем дисплей, если запускаемый по крону скрипт должен использовать графику:
DISPLAY =:0.0Выбор времени выполнения задания
Время запуска представляется в таком виде:
Минута час день_месяца месяц день_недели команда
Символ "*" подразумевает - любое значение.
Минимальное время 1-а минута. Это связано с тем что cron каждую минуту просматривает список заданий, и ищет которые нужно выполнить.
Дополнительные переменные cron
Управление при помощи crontab
Добавление файла расписания:
Crontab имя_файла_расписания
Вывести содержимое текущего файла расписания:
Crontab -l
Удаление текущего файла расписания:
Crontab -r
Редактирование текущего файла расписания (при первом запуске будет выведен список поддерживаемых текстовых редакторов):
Crontab -e
Этот ключ позволяет выполнять вышеописанные действия для конкретного пользователя:
Crontab -u username
Учтите, что -u можно воспользоваться только запуская crontab от лица суперпользователя .
Примеры
Каждую минуту:
* * * * *Каждый час, с использованием переменных cron:
@ hourly ~/ script.shКаждый день в 03:15 запускать скрипт:
15 3 * * * ~/ script.shКаждый понедельник:
0 0 * * 1Каждый четный час:
* */ 2 * * *Тоже что и выше, но расписанное полностью:
* 0 ,2 ,4 ,6 ,8 ,10 ,12 ,14 ,16 ,18 ,20 ,22 * * *Каждые 10 минут:
*/ 10 * * * *Новый год :
59 23 31 dec *Каждый будний день в 22:00:
0 22 * * 1 -5Запуск программы с графической оболочкой (GUI); каждую минуту будет отображаться сообщение с текстом «It work!»:
0 -59 * * * * DISPLAY =:0 gdialog --msgbox "It work\!" 25 20 > / dev/ null* где DISPLAY=:0 - номер монитора
GUI версии
GTK+
Есть очень полезная программа: Scheduled tasks (gnome-schedule). Она представляет собой графический интерфейс для cron, и будет полезна новичкам, так как понятным языком описывает время выполнения задачи. К примеру:
15 * * * *
каждый час в 15 минут;
* 0 * * *
каждую минуту, между 00:00 и 00:59.