Предположим, у вас есть сайт, работающий на Zend Framework и вам необходимо по cron'у вызывать отдельные скрипты вашего проекта. Можно решить эту проблему просто вызовом соответствующих URL'ов, типа http://site.com/my/action. Но что делать, если скрипт подразумевает работу в течение 5-10 минут? Не делать же максимальное время обработки скрипта 10 минут.
Создайте каталог cron, находящийся на том же уровне, что и ваш публичный каталог, в котором лежит index.php.
Создайте в нем файл, например, sendmail.php:
<?php
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(),
)));
/** Zend_Application */
require_once 'Zend/Application.php';
// Create application, bootstrap, and run
$application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' );
$application->bootstrap();
// ** Процесс
// Тут пишите нужный вам код точно также, как если бы вы писали его в экшнах, например:
$users = Default_Model_User::getInstance()->getUnconfirmed();
if($users && $users->count()) {
foreach($users as $user) {
$user->notify();
}
}
То, что выделено жирным шрифтом будет у вас постоянным. Вы можете поэкспериментировать со строкой $application->bootstrap(), например, загружая только те ресурсы, которые вам требуются для выполнения конкретной операции.
А в cron'е вызывать скрипт, как и любой другой:
*/5 * * * * /usr/bin/php /all/www/mysite/cron/sendmail.php