public function boot() { // Please note the different namespace // and please add a \ in front of your classes in the global namespace \Event::listen('cron.collectJobs', function () { \Cron::add('example1', '* * * * *', function () { $this->index(); return 'No'; }); \Cron::add('example2', '*/2 * * * *', function () { // Do some crazy things successfully every two minute return null; }); \Cron::add('disabled job', '0 * * * *', function () { // Do some crazy things successfully every hour }, false); }); }
/** * Tests the Cron run route with setting up the security key and with sending the right key * * @covers \Liebig\Cron\CronServiceProvider */ public function testRunRouteWithKeyWithCorrectSendKey() { \Event::listen('cron.collectJobs', function () { Cron::add('test1', "* * * * *", function () { }); Cron::add('test2', "* * * * *", function () { return 'No'; }); }); if ($this->laravelVersion >= 5) { \Config::set('liebigCron.cronKey', 'yT7yt3sa4tg5vtlLWbofF95v65FSWWZ8'); \Config::set('liebigCron.logOnlyErrorJobsToDatabase', false); } else { \Config::set('cron::cronKey', 'yT7yt3sa4tg5vtlLWbofF95v65FSWWZ8'); \Config::set('cron::logOnlyErrorJobsToDatabase', false); } $response = $this->call('GET', 'cron.php', array('key' => 'yT7yt3sa4tg5vtlLWbofF95v65FSWWZ8')); $this->assertEquals(200, $response->getStatusCode()); $this->assertEquals(1, \Liebig\Cron\Models\Manager::count()); $this->assertEquals(2, \Liebig\Cron\Models\Job::count()); $jobs = \Liebig\Cron\Models\Job::all(); $this->assertEquals(2, count($jobs)); $this->assertEquals('test1', $jobs[0]->name); $this->assertEquals('', $jobs[0]->return); $this->assertEquals('test2', $jobs[1]->name); $this->assertEquals('No', $jobs[1]->return); }
*/ App::missing(function ($exception) { return Response::view('home.404'); }); App::error(function (Illuminate\Database\Eloquent\ModelNotFoundException $e) { return Response::view('home.404'); }); /* |-------------------------------------------------------------------------- | Require The Filters File |-------------------------------------------------------------------------- | | Next we will load the filters file for the application. This gives us | a nice separate location to store our route and application filter | definitions instead of putting them all in the main routes file. | */ require app_path() . '/filters.php'; require app_path() . '/config/validators.php'; ini_set('max_execution_time', 60); DB::disableQueryLog(); //bind hybrid auth to the container App::bind('Hybrid_Auth', function () { return new Hybrid_Auth(app_path() . '/config/hybridauth.php'); }); Event::listen('cron.collectJobs', function () { Cron::add('Sitemap', '0 0 2 * *', function () { Helpers::createSitemap(); return null; }); });
function add() { $model = new Cron(); $model->add(); $this->redirect('/cron/'); }
private function cron() { \Event::listen('cron.collectJobs', function () { /** * CRON: Alimentación de cola de producciones * DESCRIPCION: Alimenta la cola de producciones que se van a procesar * EJECUCION: Cada 3 minutos */ \Cron::add(AutoProcess::CRON_PRODUCTIONS_FEED, '*/3 * * * *', function () { if (!AutoProcess::isActived(AutoProcess::CRON_PRODUCTIONS_FEED)) { return "Desactivado"; } $productionFeed = new ProductionFeed(); //Carga datos de producciones (peliculas) en el repositorio $productionFeed->loadRepository(); //Alimenta la cola de actualizaciones de peliculas $productionFeed->feedQueue(); return count($productionFeed->dataRepository) . " Producciones cargadas en cola"; }); /** * CRON: Seguimiento de produccion * DESCRIPCION: Toma las producciones en cola indicadas y las procesa obtienendo todos los datos de la produccion * EJECUCION: Cada minuto */ \Cron::add(AutoProcess::CRON_PRODUCTION_TRACK, '* * * * *', function () { if (!AutoProcess::isActived(AutoProcess::CRON_PRODUCTION_TRACK)) { return "Desactivado"; } $queue = QueueProductions::where(QueueProductions::ATTR_DATE_PROCESSED, null)->orderBy(QueueProductions::ATTR_ID, "ASC")->take(1)->get(); foreach ($queue as $production) { $provider = new ProductionProvider($production->name, $production->link); $production_id = $provider->save(); //Indica el registro como procesado. Esto ocasiona que la produccion ya no se vuelva a actualizar, hasta una nueva cola. $production->production_id = $production_id; $production->date_processed = DateUtil::getCurrentTime(); $production->save(); return $production->name . " Agregado"; } return "Sin cola"; }); /** * CRON: Seguimiento de persona * DESCRIPCION: Toma las personas indicadas y las procesa para obtener todos sus datos * EJECUCION: Cada minuto */ \Cron::add(AutoProcess::CRON_PERSON_TRACK, '* * * * *', function () { if (!AutoProcess::isActived(AutoProcess::CRON_PERSON_TRACK)) { return "Desactivado"; } $queue = QueuePersons::where(QueuePersons::ATTR_DATE_PROCESSED, null)->orderBy(QueuePersons::ATTR_ID, "DESC")->take(1)->get(); foreach ($queue as $person) { $provider = new PersonProvider($person->name, $person->link); $provider->save(); //Indica el registro como procesado. Esto ocasiona que la produccion ya no se vuelva a actualizar, hasta una nueva cola. $person->date_processed = DateUtil::getCurrentTime(); $person->save(); return $person->name . " Agregado"; } return "Sin cola"; }); /** * CRON: Envio de correo de notificacion de producciones disponibles * DESCRIPCION: Verifica todos las producciones en seguimientos por parte de los usuarios premium y cuando esten disponibles les envia un correo notificandoles * EJECUCION: Cada 12 horas */ \Cron::add(AutoProcess::CRON_USER_PRODUCTION_TRACK_SEND_MAIL, '0 */12 * * *', function () { if (!AutoProcess::isActived(AutoProcess::CRON_USER_PRODUCTION_TRACK_SEND_MAIL)) { return "Desactivado"; } //Obtiene todos los usuarios premium $users = User::where(User::ATTR_ROLE, User::ROLE_SUSCRIPTOR_PREMIUM)->get(); foreach ($users as $user) { //Obtiene las producciones que siguen que ya se encuentran disponibles y que no sean notificado por correo $productions = $user->tracks()->wherePivot(User::ATTR_TRACK_PIVOT_MAILED, 0)->where(Production::ATTR_STATE, Production::STATE_ACTIVE)->get(); if (count($productions) == 0) { continue; } if (count($productions) > 1) { $description_email = "<p>Este mensaje es para informate que varias producciones que te gustaria ver en nuestra plataforma ya se encuentran disponibles y las puedes ver cuando quieras.</p>" . "<div style='text-align:center;'>" . "<h2>Nuevas producciones disponibles para ti</h2>" . "</div>" . "<div style='text-align:center;'>"; } else { $description_email = "<p>Este mensaje es para informate que una producción que te gustaria ver en nuestra plataforma ya se encuentran disponible y la puede ver cuando quieras.</p>" . "<div style='text-align:center;'>" . "<h2>Nueva producción disponible para ti</h2>" . "</div>" . "<div style='text-align:center;'>"; } foreach ($productions as $production) { //Notifica las producciones disponibles asociadas $description_email .= "<a href='" . AutoProcess::URL_SITE . "production/" . $production->slug . "'><img width='192px' height='289px' style='margin: 0px 10px;' src='" . $production->image . "'></a>"; $production->pivot->mailed = 1; $production->pivot->save(); } $description_email .= "</div>"; //Envia el correo de notificacion del usuario $email = new Email(count($productions) > 1 ? "¡Hay varias producciones que te gustaria ver que ya estan disponible!" : "¡Una producción que te gustaria ver ya esta disponible!", $user[User::ATTR_EMAIL], [Email::VAR_NAME => $user->name, Email::VAR_DESCRIPTION => $description_email]); $email->queue(); } return "Notificaciones realizadas (Si aplican)"; }); /** * CRON: Genera el sitemap.xml del sitio * EJECUCION: Cada Semana */ \Cron::add(AutoProcess::CRON_GENERATE_SITEMAP, '0 0 * * 0', function () { //Url standards del sitio web $urls = array(AutoProcess::URL_SITE, AutoProcess::URL_SITE . "doc/terms", AutoProcess::URL_SITE . "doc/privacypolicy", AutoProcess::URL_SITE . "doc/cookies-policy", AutoProcess::URL_SITE . "doc/help", AutoProcess::URL_SITE . "catalogue"); $file = fopen(public_path("sitemap.xml"), "w"); fwrite($file, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" . PHP_EOL); fwrite($file, "<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\"> " . PHP_EOL); for ($i = 0; $i < count($urls); $i++) { fwrite($file, "<url><loc>" . $urls[$i] . "</loc></url>" . PHP_EOL); } //Inserta las url de cada persona $persons = \App\System\Models\Person::whereNotNull(Person::ATTR_BIOGRAPHY)->get(); foreach ($persons as $person) { fwrite($file, "<url><loc>" . AutoProcess::URL_SITE . "person/" . $person->slug . "</loc></url>" . PHP_EOL); } //Inserta las url de todas las producciones $productions = Production::all(); foreach ($productions as $production) { fwrite($file, "<url><loc>" . AutoProcess::URL_SITE . "production/" . $production->slug . "</loc></url>" . PHP_EOL); } fwrite($file, "</urlset>" . PHP_EOL); fclose($file); return "Sitemap.xml generado (" . count($persons) . " Personas) (" . count($productions) . " Producciones)"; }); /** * CRON: Publica automaticamente una produccion programada * EJECUCION: Cada hora */ \Cron::add(AutoProcess::CRON_PRODUCTION_AUTO_PUBLISH, '0 */4 * * *', function () { $productions = Production::where(Production::ATTR_STATE, Production::STATE_PROGRAMMED)->orderBy(Production::ATTR_UPDATED_AT, "ASC")->take(1)->get(); foreach ($productions as $production) { $production->state = Production::STATE_ACTIVE; $production->save(); return $production->title . " Publicado"; } return "No hay producciones programadas"; }); }); }
}); /* |-------------------------------------------------------------------------- | Require The Filters File |-------------------------------------------------------------------------- | | Next we will load the filters file for the application. This gives us | a nice separate location to store our route and application filter | definitions instead of putting them all in the main routes file. | */ require app_path() . '/filters.php'; /* |-------------------------------------------------------------------------- | Lieberg Cron Jobs |-------------------------------------------------------------------------- | this will help us excute all our cron job functions | | | | */ Event::listen('cron.collectJobs', function () { Cron::add('update', '* * * * *', function () { // Do some crazy things unsuccessfully every minute $orders = Order::where('activity', '=', '0')->delete(); return true; }); Cron::setEnableJob('update'); $report = Cron::run(); });
<?php Event::listen('cron.collectJobs', function () { Cron::add('daily new churches notification', $_ENV['CRON_DAILY'], function () { $churches = Church::yesterday(); if ($churches && $churches->count() > 0) { $data['churches'] = $churches; Mail::send('emails.dailynewchurches', $data, function ($message) { // michhsin@ccea.org.tw $message->to('*****@*****.**', '一領一禱告認領同工')->subject('一領一禱告認領:新加入教會通知 ' . date('Y/m/d'))->bcc('*****@*****.**', 'lancetw'); }); } }, true); }); /* |-------------------------------------------------------------------------- | Register The Laravel Class Loader |-------------------------------------------------------------------------- | | In addition to using Composer, you may use the Laravel class loader to | load your controllers and models. This is useful for keeping all of | your classes in the "global" namespace without Composer updating. | */ ClassLoader::addDirectories(array(app_path() . '/commands', app_path() . '/controllers', app_path() . '/models', app_path() . '/database/seeds')); /* |-------------------------------------------------------------------------- | Application Error Logger |-------------------------------------------------------------------------- | | Here we will configure the error logger setup for the application which
Sync::sync('StageMove', Config::get('larafuse::syncStageLimit')); Sync::sync('JobRecurringInstance', Config::get('larafuse::syncStageLimit')); return null; }); Cron::add('Sync Order Group', Config::get('larafuse::syncOrderGroupTime'), function () { Sync::syncOrderGroup(Config::get('larafuse::syncOrderLimit')); return null; }); Cron::add('Sync One', Config::get('larafuse::syncOneTime'), function () { Sync::sync('Referral', Config::get('larafuse::syncOneLimit')); Sync::sync('Campaignee', Config::get('larafuse::syncOneLimit')); Sync::sync('FileBox', Config::get('larafuse::syncOneLimit')); return null; }); Cron::add('Sync Missing', Config::get('larafuse::syncMissingTime'), function () { Sync::syncMissing(); return null; }); $report = Cron::run(); print_r($report); }); Route::group(array('prefix' => 'larafuse'), function () { Route::get('/test', function () { return Fuse::dsQuery('Product', 1, 0, ['Id' => '%'], ['Id', 'ProductName']); }); Route::get('fetch/rowcount', function () { return Fetch::getRowCount(); }); Route::get('fetch/{table?}', 'Sairiz\\Larafuse\\Controllers\\LarafuseController@fetch'); Route::get('fetchid/{table}/{Id}', 'Sairiz\\Larafuse\\Controllers\\LarafuseController@fetchId'); Route::get('fetchtable/{table}/{page?}/{continue?}', 'Sairiz\\Larafuse\\Controllers\\LarafuseController@fetchTable'); Route::get('syncmissing/{table?}', 'Sairiz\\Larafuse\\Controllers\\LarafuseController@syncMissing');
$files = File::files($directory); if (!empty($files)) { foreach ($files as $file) { $xml = (array) simplexml_load_file($file); $save = $doc->updateMetadata($xml, null, true); } } }); $servers = Server::all(); foreach ($servers as $server) { /** * Pull file from remote servers periodically * Depends on each server schedule configuration */ Cron::add($server['jobname'], $server['schedule'], function () use($server) { exec('rsync -a -e "ssh -p 2222" ' . $server['hostname'] . '@' . $server['address'] . ':' . $server['directory'] . ' ' . $_ENV['SYNC_DIRECTORY']); }); /** * Sync metadata.xsd (push) */ // Cron::add("schema", $_ENV['SCHEMA_SYNC_SCHEDULE'], function() use ($server) { // exec('rsync -a -e "ssh -p 2222" '.$_ENV['SYNC_DIRECTORY'].' '.$server['hostname'].'@'.$server['address'].':public'); // }); } }); /* |-------------------------------------------------------------------------- | Require The Filters File |-------------------------------------------------------------------------- | | Next we will load the filters file for the application. This gives us