Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Добрый день
Просьба помочь разобраться в ошибке.
После каких-то изменений(я так думаю) перестали работать задания, запускаемые по планировщику.
При этом, если я запускаю cron вручную, задания выполняются как положено.
на сервере крон запускается следующей записью :
/usr/bin/php5 /var/www/bacay/data/www/bacay.ru/artisan schedule:run >> /dev/null 2>&1
Запись рабочая. При ручном запуске этой команды запланированные задания выполняются как положено.
в логах видно, что команда запускается каждую минуту:
Nov 12 10:38:01 bacay CRON[7525]: (root) CMD (/usr/bin/php5 /var/www/bacay/data/www/bacay.ru/artisan schedule:run >> /dev/null 2>&1 >/dev/null 2>&1)
в Kernel.php прописаны следующие задания:
$schedule->call(function () {
$adverts = \Advert::all();
foreach($adverts as $advert)
{
if(isset($advert->pivotEnd[0]))
{
$end = $advert->pivotEnd[0]->pivot->end;
$status = $advert->status;
if($end < \Carbon::now() && $status == 1)
{
\DB::table('advert')
->where('id', $advert->id)
->update(['status' => 0]);
}
}
}
})->everyMinute();
$schedule->call(function () {
$advusl =\DB::table('advert_uslugi')->get();
foreach($advusl as $item)
{
$now = date('Y-m-d H:i:s');
$now_date = strtotime($now);
$end = $item->end;
$end_date = strtotime($end);
$flag = $item->flag;
if($end_date < $now_date && $flag == 1)
{
\DB::table('advert_uslugi')
->where('uslugi_id', $item->uslugi_id)
->update(['flag' => 0]);
$services_id = $item->services_id;
if($services_id == 4)
{
$advert_id = $item->advert_id;
$advert = \Advert::findOrFail($advert_id);
$advert->public_at = date('Y-m-d H:i:s');
$advert->save();
}
}
}
})->everyMinute();
Не в сети
Может всё-таки кто-то знает?
Не в сети
80% проблема в правах.
1. полный путь до файла, где хранится крон-вызов
2. версия лары
3. версия рнр
4. веб-сервер какой
5. какая операционка
6. какие права на файле с крон вызовом (и какой режим)
не спрашивай как решить проблему, если не описываешь окружения, тебе никто помогать не будет в таком виде.
Изменено hzone (12.11.2016 15:56:04)
Не в сети
1. До директории, где установлен сам laravel(Корневая директория): /var/www/bacay/data/www/bacay.ru
2. laravel/framework: 5.2
3. Версия PHP на сервере: 5.6.20-0+deb8u1.
Режим работы PHP: FastCGI (Nginx + PHP-FPM)
4. Веб сервер: VDS
5. ОС: Debian 8 x64 + ISPmgr5
6. В этом конечно мало опыта. Можно уточнить на каком файле?
Если имеется в виду какие права доступа на artisan, то 600 [-rw-------]
Если имеется в виду какие права доступа на Kernel.php(в нём прописаны задания), то 755 [-rwxr-xr-x]
Не в сети
или же это
/var/spool/cron/crontabs/root
у него права 600 [-rw-------]
Не в сети
или же это
/var/spool/cron/crontabs/root
у него права 600 [-rw-------]
вот тут и проблема.
1. должен быть не рут, а пользователь под которорым лежат файлы проекта
- от рута тупо работать не будет от кронтаба, у него есть свой набор и файловая структура
2. когда создаёшь новый кронтаб-файл крон надо перезапускать
- и тут есть явный красный флаг = смотришь в лог и видишь, что крон ругается и скипает файл (хотя может и не ругаться, тут несколько зависимых условий)
короче у тебя есть пользователь bacay - переименуй root в bacay и дай ему права bacay:bacay 0600
перезапусти крон service cron restart
должно работать
Не в сети
Поменял. Но ситуация не поменялась. Если отдельно запускаю эту команду - всё работает.
До этого несколько месяцев работала как положено, что сейчас изменилось - не пойму
Новые данные.
/var/spool/cron/crontabs/ У файла bacay сейчас права 600 [-rw-------]
В логах
Nov 12 18:20:01 bacay CRON[22594]: (bacay) CMD (/usr/bin/php5 /var/www/bacay/data/www/bacay.ru/artisan schedule:run >>/dev/null 2>&1 >/dev/null 2>&1)
и так пробовал
Nov 12 18:24:01 bacay CRON[22755]: (bacay) CMD (php /var/www/bacay/data/www/bacay.ru/artisan schedule:run >>/dev/null 2>&1 >/dev/null 2>&1)
Не в сети
>>/dev/null 2>&1 >/dev/null 2>&1
выкинь и смотри почту (крон результат на рута бросает)
если не настроил то /var/spool/mail/root
Не в сети
причина возникновения ошибки стала ясна.
016-11-12 21:27:02] production.ERROR: exception 'ErrorException' with message 'Undefined index: HTTP_USER_AGENT' in /var/www/bacay/data/www/bacay.ru/modules/User/Entities/User.php:342
Stack trace:
#0 /var/www/bacay/data/www/bacay.ru/modules/User/Entities/User.php(342): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(8, 'Undefined index...', '/var/www/bacay/...', 342, Array)
#1 /var/www/bacay/data/www/bacay.ru/app/Http/routes.php(19): Modules\User\Entities\User::set_location()
#2 /var/www/bacay/data/www/bacay.ru/app/Providers/RouteServiceProvider.php(41): require('/var/www/bacay/...')
#3 [internal function]: App\Providers\RouteServiceProvider->App\Providers\{closure}(Object(Illuminate\Routing\Router))
#4 /var/www/bacay/data/www/bacay.ru/vendor/laravel/framework/src/Illuminate/Routing/Router.php(398): call_user_func(Object(Closure), Object(Illuminate\Routing\Router))
#5 /var/www/bacay/data/www/bacay.ru/app/Providers/RouteServiceProvider.php(42): Illuminate\Routing\Router->group(Array, Object(Closure))
#6 [internal function]: App\Providers\RouteServiceProvider->map(Object(Illuminate\Routing\Router))
#7 /var/www/bacay/data/www/bacay.ru/vendor/laravel/framework/src/Illuminate/Container/Container.php(507): call_user_func_array(Array, Array)
#8 /var/www/bacay/data/www/bacay.ru/vendor/laravel/framework/src/Illuminate/Foundation/Support/Providers/RouteServiceProvider.php(72): Illuminate\Container\Container->call(Array)
#9 /var/www/bacay/data/www/bacay.ru/vendor/laravel/framework/src/Illuminate/Foundation/Support/Providers/RouteServiceProvider.php(31): Illuminate\Foundation\Support\Providers\RouteServiceProvider->loadRoutes()
#10 /var/www/bacay/data/www/bacay.ru/app/Providers/RouteServiceProvider.php(29): Illuminate\Foundation\Support\Providers\RouteServiceProvider->boot(Object(Illuminate\Routing\Router))
#11 [internal function]: App\Providers\RouteServiceProvider->boot(Object(Illuminate\Routing\Router))
#12 /var/www/bacay/data/www/bacay.ru/vendor/laravel/framework/src/Illuminate/Container/Container.php(507): call_user_func_array(Array, Array)
#13 /var/www/bacay/data/www/bacay.ru/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(757): Illuminate\Container\Container->call(Array)
#14 /var/www/bacay/data/www/bacay.ru/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(740): Illuminate\Foundation\Application->bootProvider(Object(App\Providers\RouteServiceProvider))
#15 [internal function]: Illuminate\Foundation\Application->Illuminate\Foundation\{closure}(Object(App\Providers\RouteServiceProvider), 14)
#16 /var/www/bacay/data/www/bacay.ru/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(741): array_walk(Array, Object(Closure))
#17 /var/www/bacay/data/www/bacay.ru/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/BootProviders.php(17): Illuminate\Foundation\Application->boot()
#18 /var/www/bacay/data/www/bacay.ru/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(203): Illuminate\Foundation\Bootstrap\BootProviders->bootstrap(Object(Illuminate\Foundation\Application))
#19 /var/www/bacay/data/www/bacay.ru/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(219): Illuminate\Foundation\Application->bootstrapWith(Array)
#20 /var/www/bacay/data/www/bacay.ru/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(105): Illuminate\Foundation\Console\Kernel->bootstrap()
#21 /var/www/bacay/data/www/bacay.ru/artisan(36): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#22 {main}
[ErrorException]
Undefined index: HTTP_USER_AGENT
но при этом не понимаю почему нижеуказанный код влияет на планировщик.
Как раз недавно и добавлял этот код, чтобы уменьшить количество запросов к стороннему ресурсу
$is_bot = preg_match(
"~(Google|Yahoo|Rambler|Bot|Yandex|Spider|Snoopy|Crawler|Finder|Mail|curl)~i",
$_SERVER['HTTP_USER_AGENT']
);
$response = !$is_bot ? json_decode(file_get_contents('http://api.sypexgeo.net/json/'.\Request::ip()), true): [];
Не в сети
сразу видно, что человек не учится на ошибках))))
try-catch тебе в помощь!
ну или например проверяй наличие данных или вообще переменной. пользуйся empty() он и iiset() проверит и на пустоту
Не в сети
Спасибо))
Не в сети
Страницы 1