Выполнение php с помощью crontab - PullRequest
20 голосов
/ 22 апреля 2010

Я пытаюсь запустить php-скрипт по расписанию. Так что я подумал, что crontab - хорошая идея. Я использую сервер на Linux, с которым я не очень знаком. Проблема в том, что я не знаю, как сделать скрипт исполняемым с php. Мне нужно сослаться на скрипт или поместить его в папку, в которой можно запустить php из командной строки. Так что я не знаю, какой путь дать моему crontab, например:

5  * * * * var/www/some/path/script.php

Я нашел некоторую расплывчатую информацию об этом исполняемом файле php, найденном в

/usr/bin/php

Но я не могу найти там php-файл, может быть, он не установлен? У меня установлена ​​php5 и apache:

/etc/php5

Таким образом, мой вопрос звучит так: есть ли в любом случае выполнить php-скрипт с crontab в любой другой папке, или мне просто не хватает исполняемого файла php в usr / bin / php?

Ответы [ 6 ]

30 голосов
/ 22 апреля 2010

Начните с ввода в командной строке:

whereis php

Сделайте это как пользователь, под которым будет выполняться задание cron. Это покажет вам путь к вашему исполняемому файлу. Затем вы можете использовать этот путь (если его еще нет в переменной PATH) в вашей записи cron:

5 * * * * /your/path/to/php /var/www/some/path/script.php

Редактировать: вам может потребоваться установить пакет php5-cli (имя пакета Ubuntu), если все, что у вас есть, это установленный модуль Apache PHP. Это даст вам двоичный исполняемый файл, который вы можете запустить из командной строки.

5 голосов
/ 22 сентября 2011

Мне нужно было найти след по пути, чтобы найти исполняемый файл:

andy@ararat:~$ type php
php is /usr/bin/php

andy@ararat:~$ file /usr/bin/php
/usr/bin/php: symbolic link to `/etc/alternatives/php'

andy@ararat:~$ file /etc/alternatives/php
/etc/alternatives/php: symbolic link to `/usr/bin/php5'

andy@ararat:~$ file /usr/bin/php5
/usr/bin/php5: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped

, поэтому вам нужно включить / usr / bin / php5 в качестве пути к исполняемому файлу php, например:

andy@ararat:~$crontab -e
#*/1 * * * * /usr/bin/php5 /home/andy/www/dev.com/corp_rewards_cron.php
5 голосов
/ 22 апреля 2010

Это система Linux?

В новых дистрибутивах Linux есть
на самом деле удобная система настройки crontab
это не требует никакой записи в crontab пользователем. Например, в SuSE Linux у вас есть каталоги

/etc/cron.hourly/
/etc/cron.daily/
/etc/cron.monthly/
/etc/cron.weekly/

Просто поместите скрипт вызова (konno_php_start) в любой из этих каталоги, как

/etc/cron.hourly/konno_php_start

, который является исполняемым (chmod 755 или около того) и содержит:

#!/bin/sh
cd /var/www/some/path/
php  script.php >> logfile.txt 2>&1

и перезапустите демон cron. Вот и все.

Из файла журнала вы увидите, если ваш php-интерпретатор
будет найден в ПУТИ. Если нет, измените строка в /etc/cron.hourly/konno_php_start до

/full/path/to/php  script.php >> logfile.txt 2>&1

Привет

БВУ

2 голосов
/ 22 апреля 2010

Вы также можете использовать env , он найдет и запустит php для вас:

/usr/bin/env php /var/www/some/path/script.php

Или вы можете поместить shebang в свой script.php (первая строка):

#!/usr/bin/env php

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

5  * * * * /var/www/some/path/script.php
1 голос
/ 30 октября 2015

Вы можете использовать команду wget локально:

5  * * * * wget http://localhost/some/path/script.php
0 голосов
/ 22 апреля 2010

Я предлагаю вам сделать это,

*/5 * * * * /path/gridmon2.pl 1> /dev/null 2> /dev/null

где в вашем .pl коде вы должны использовать grep, используя wget или что-то вроде этого:

wget "/www/root/index.php"

или вы можете просто сделать так:

/usr/bin/wget "/www/root/index.php"

Это только мое предложение, я только пробовал wget на внешний сайт не локально, и он работает.

Пожалуйста, попробуйте и вернитесь.

...