Php crontab каждый час

Запуск программ по расписанию. Использование CRON

Большинство хостеров предлагают возможность запуска программ по расписанию. Т.е. Вы можете автоматически выполнять некоторые свои программы через определенные интервалы времени. Напимер каждые 30 минут или каждый день. Это бывает очень полезно для проведения обслуживания вашего сайта. Так называемых регламентных операций, например очистка папки с временными файлами, очистка и сжатие базы данных.

Каждая строка в файле /etc/crontab имеет следующий формат:

  • minute — любое целое число от 0 до 59
  • hour — любое целое от 0 до 23
  • day — любое целое от 1 до 31 (день должен быть корректным, если указан месяц)
  • month — любое целое от 1 до 12 (или короткое название месяца, например: jan, feb и так далее)
  • dayofweek — любое целое от 0 до 7, где 0 или 7 означает Воскресенье (или короткое название дня недели, например: sun, mon и так далее)
  • command — команда, которая должны быть выполнена. Командой может быть как простая команда, например, ls /proc >> /tmp/proc , или команда запуска написанного вами специального сценария.
Читайте также:  Python telegram bot api telebot

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

Дефис (-) между целыми числами обозначает диапазон чисел. Например, 1-4 означает целые числа 1, 2, 3 и 4.

Список значений, разделенных запятыми (,), обозначает перечень. Например, перечисление 3, 4, 6, 8 означает четыре указанных целых числа.

Косая черта (/) используется для определения шага значений. Целочисленное значение может быть пропущено в диапазоне, если после диапазона указать /целое>. Например, значение минут 0-59/2, определяет, что будет пропущена каждая вторая минута. В качестве шага значений также может быть указана звёздочка. Например, значение месяца */3 определяет, что будет пропущен каждый третий месяц.

Любые строки, начинающиеся с символа решетки (#), являются комментариями, и не обрабатываются.

Как указывать путь к запускаемому через crontab файлу?

Маска пути: ~/public_html/cgi-bin/&
/home/w/windows/public_html/cgi-bin/&
Символ & в конце строки является необязательным элементом и указывает, что программу нужно запустить в фоновом режиме
Символ ~ обозначает путь от корня к домашнему каталогу пользователя

Проблемы с запуском программы по CRON-у

Если Вы действительно правильно указали путь, проверьте формат файла скрипта. Скрипты, запускаемые через crontab, должны быть сохранены в формате Unix. Речь идет о формате конца строки. Он должен быть таким, как принято в системах Unix — LF (вместо CRLF, использующегося в DOS и Windows или CR в системах Macintosh).

В первой строке PHP файла, запускаемого по Cron-у обязательно указание пути до интерпретатора PHP:

Или укажите команду для cronа php путь до файла или GET ссылка на файл.

Еще одна проблема, по которой может не выполняться PHP скритпт по крону, это неверные атрибуты файла. Установите флаг выполнения -rwxr-xr-x

Примеры cron заданий

0 */3 * * 2,5 /home/u12345/script.php — скрипт /home/u12345/script.php будет автоматически запускаться каждые три часа во вторник и в пятницу;
0 * * * * /home/u12345/script.php — выполнять задание каждый час в 0 минут;
0 */3 * * * /home/u12345/script.php — выполнять задание каждые три часа в 0 минут;
15 1 * * 1 /home/u12345/script.php — выполнять задание по понедельникам в 1 час 15 минут ночи;
1 0 5 4 * /home/u12345/script.php — выполнять задание 5 апреля в 0 часов 1 минуту каждый год;
13 13 13 * 5 /home/u12345/script.php — выполнять задание в пятницу 13 числа в 13 часов 13 минут;
10 6 1 * * /home/u12345/script.php — выполнять задание ежемесячно 1 числа в 6 часов 10 минут;
30 3 * * mon hello — выполнять команду hello каждый понедельник в 3:30;
10 4 1 * * hello — выполнять команду hello в первый день каждого месяца в 4:10;
5 0 * * * $HOME/bin/daily.job >> $HOME/log/daily 2>&1 — выполнять задание каждый день в 0 часов 5 минут, результат складывать в log/daily;
0 22 * * 1-5 echo «Пора домой» | mail -s «Уже 22:00» john — выполнять задание каждый рабочий день в 22:00;
23 */2 * * * echo «Выполняется в 0:23, 2:23, 4:23 и т. д.» ;
5 4 * * sun echo «Выполняется в 4:05 в воскресенье» ;
0 0 1 1 * echo «С новым годом!» ;
15 10,13 * * 1,4 echo «Эта надпись выводится в понедельник и четверг в 10:15 и 13:15» ;
0-59 * * * * echo «Выполняется ежеминутно» ;
*/5 * * * * echo «Прошло пять минут» — каждые 5 минут.

Т.к. при запуске по cron-у php программы не будут определены системные перемнные такие, как $_SERVER, вы можете использовать мой прием, который позволит Вам не мучаться с отладкой таких CRON-скриптов. Вставьте в самое начало php скрипта следующий код:

if(empty($_SERVER['DOCUMENT_ROOT']))$_SERVER['DOCUMENT_ROOT']=dirname(dirname(__FILE__)); if(empty($_SERVER['HTTP_HOST']))$_SERVER['HTTP_HOST']='htmlweb.ru'; if(!isset($_SERVER['REMOTE_ADDR'])||!$_SERVER['REMOTE_ADDR'])$_SERVER['REMOTE_ADDR']='127.0.0.1'; if(!isset($_SERVER['REQUEST_URI'])||!$_SERVER['REQUEST_URI'])$_SERVER['REQUEST_URI']='/cron.php';

Источник

Выполнение заданий по Cron

Cron — UNIX-программа, которая используются для периодического выполнения заданий в определённое время. Расписание и действия описываются инструкциями в файлах crontab, их можно посмотреть через SSH, командой:

Файл с заданиями, выглядит примерно так:

crontab -l * * * * * /usr/local/script.sh o */2 * * * /Usr/local/bin/wget -O - -q "https://example.com/update.php"

Для редактирования используется команда:

Редактирование в консоле крайне не удобно, поэтому на большинстве хостингов имеется web-интерфейс, что достаточно упрощает настройку, например, Masterhost.ru:

Crontab в Masterhost

Crontab в Timeweb

Синтаксис crontab

Команды делятся на две части – временной интервал и команда: [ минута ] [ час ] [ день месяца ] [ месяц ] [ день недели ] [ пользователь ] [ команда ] В большинстве хостингах «Пользователь» не доступен, далее в примерах он не указан.

Настройка времени запуска

Минуты

Каждую минуту:

# Минута Час День Месяц День недели * * * * *

Каждую чётную минуту:

# Минута Час День Месяц День недели 0-59/2 * * * *

Каждую нечётную минуту:

# Минута Час День Месяц День недели 1-59/2 * * * *

Каждые 10 минут:

# Минута Час День Месяц День недели */10 * * * *

Часы

Каждый час:

# Минута Час День Месяц День недели 0 */1 * * *

Каждые 3 часа:

# Минута Час День Месяц День недели 0 */3 * * *

Каждый день, в 12:00:

# Минута Час День Месяц День недели 0 12 * * *

Несколько раз в день (6:00, 12:00, 18:00):

# Минута Час День Месяц День недели 0 6,12,18 * * *

Дни

1-го и 15-го числа, в 9:00:

# Минута Час День Месяц День недели 0 9 1,15 * *

Дени недели

Каждый понедельник, в 6:30:

# Минута Час День Месяц День недели 30 6 * * 1

Каждый рабочий день в 9:00:

# Минута Час День Месяц День недели 0 9 * * 1-5

Несколько раз в неделю (понедельник, четверг):

# Минута Час День Месяц День недели 0 9 * * 1,4

Месяцы

Раз в месяц (9:00, первого числа):

# Минута Час День Месяц День недели 0 9 1 * *

В новый год:

# Минута Час День Месяц День недели 59 23 31 12 *

Константы

  • @reboot – при перезагрузки
  • @yearly , @annually – раз год
  • @monthly – раз в месяц
  • @weekly – раз в неделю
  • @daily , @midnight – каждый день
  • @hourly – каждый час

Команды

Во второй части указываются команды unix shell, можно указать несколько команд, разделив их точкой с запятой.

Запустить bash-скрипт:

Запустить PHP-скрипт:

* * * * * /usr/local/bin/wget -O - -q "https://example.com/update.php"

Добавить директорию в архив:

* * * * * zip -r /home/backup.zip /home/site/www

Удалить файлы из директории:

Будьте осторожны при использовании команды rm -rf , перед её использованием сделайте резервную копию файлов.

Сделать бэкап БД в архиве ZIP:

* * * * * mysqldump -uЛОГИН -hХОСТ -pПАРОЛЬ НАЗВАНИЕ_БД | gzip > /home/backup-`date +\%Y_\%m_\%d`_sql.gz

Источник

Оцените статью