PHP: выполнение запланированных заданий (задания крона)

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

41
задан Eikern 3 June 2010 в 11:36
поделиться

7 ответов

Это - то, для чего сделаны cronjobs. man crontab принятие Вас выполняют сервер Linux. Если у Вас нет доступа оболочки или никакого способа установить cronjobs, существуют бесплатные сервисы, которые устанавливают cronjobs на внешних серверах и проверяют с помощью ping-запросов один из Ваших URL.

34
ответ дан Armin Ronacher 27 November 2019 в 00:29
поделиться

Командная строка PHP + крон был бы путем, которым я пойду. Это просто и должно отвечать всем требованиям. Это обычно устанавливается с PHP как само собой разумеющееся.

0
ответ дан Gavin M. Roy 27 November 2019 в 00:29
поделиться

Если бы Вы не хотите настраивать задания крона и этажерку (хотя я предположил бы, что это - лучший метод), решение, которое Вы предоставили, довольно хорошо. В ряде проектов у меня был сам Сценарий PHP, делают проверку, чтобы видеть, пора ли выполнить обновление.

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

позитивный аспект - то, что, если никто не использует приложение во время определенного периода тогда, сценарий не будет работать. Задачами, которые у меня есть настроенный, чтобы сделать, являются вещи как "обновление файл кэша", "делают ежедневное резервное копирование" и этажерку. Если кто-то не использует приложение, то Вы не собираетесь нуждаться в обновленных файлах кэша, ни там собираетесь быть любыми изменениями базы данных в резервном копировании.

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

4
ответ дан nickf 27 November 2019 в 00:29
поделиться

Если у Вас есть хост cPanel, можно добавить задания крона через веб-интерфейс. Перейдите к Усовершенствованному-> Cron Jobs и используйте неусовершенствованную форму для установки частоты крона. Вы хотите команду как это:

/usr/bin/php /path/to/your/php/script.php
12
ответ дан David McLaughlin 27 November 2019 в 00:29
поделиться

Я отвечаю на это теперь, потому что никто, кажется, не упомянул это точное решение.

На сайте я в настоящее время продолжаю работать, мы настроили задание крона с помощью cPanel, но вместо того, чтобы выполнить Интерпретатор PHP непосредственно (потому что мы используем CodeIgniter и наш код, отображается на функции контроллера, это, вероятно, не прекрасная идея), мы используем wget.

wget -q -O cron_job.log http://somehost/controller/method

-q то, так, чтобы wget не генерировал вывода (таким образом, Вы не будете продолжать получать электронные письма). -O cron_job.log сохранит содержание того, что Ваш контроллер генерирует к файлу журнала (перезаписанный каждый раз, таким образом, это не будет продолжать расти).

я нашел, что это самый легкий способ получить 'надлежащую' работу крона.

17
ответ дан 27 November 2019 в 00:29
поделиться

если Вы задаетесь вопросом, как на самом деле выполнить Ваш Сценарий PHP от крона, существует две опции: Назовите интерпретатор PHP непосредственно (т.е. "php/foo/myscript.php") или используйте рысь (рысь http://mywebsite.com/myscript.php). Какой, который Вы выбираете, зависит главным образом от того, как для Вашего сценария нужна его настроенная среда - пути и полномочия доступа к файлу будут отличаться в зависимости от того, называете ли Вы его через оболочку или веб-браузер. Я рекомендовал бы использовать рысь.

Один побочный эффект состоит в том, что Вы получаете электронное письмо каждый раз, когда оно работает. Для обхождения этого я заставляю свои Сценарии PHP крона ничего не произвести (и это должно быть ничто, даже пробел), если они завершаются успешно, и сообщение об ошибке, если они перестали работать. Я затем называю их использующий маленький Сценарий PHP от крона. Таким образом, я только получаю электронное письмо, если оно перестало работать. Это - в основном то же, поскольку метод рыси, кроме моего сценария оболочки делает Запрос HTTP и не рысь.

Назовите этот сценарий "docron", или что-то (помните к chmod +x), и затем используйте команду в своем crontab: "docron http://mydomain.com/myscript.php". Это посылает Вам по электронной почте вывод страницы как электронное письмо HTML, если страница возвращает что-то.

#!/usr/bin/php
<?php

$h = @file_get_contents($_SERVER['argv'][1]);

if ($h === false)
{
        $h = "<b>Failed to open file</b>: " . $_SERVER['argv'][1];
}

if ($h != '')
{
        @mail("cron@mydomain.com", $_SERVER['argv']['1'], $h, "From: cron@mydomain.com\nMIME-Version: 1.0\nContent-type: text/html; charset=iso-8859-1");
}

?>
5
ответ дан MrZebra 27 November 2019 в 00:29
поделиться

Cron - это решение общего назначения для проблем планирования. Но когда вы переходите на большие объемы и частота расписаний возрастает, могут возникнуть проблемы надежности/перекрытия. Если вы видите такие проблемы, подумайте о чем-то вроде supervise или более сложном monit.

4
ответ дан 27 November 2019 в 00:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: