Laravel 5.8 cron job для php artisan schedul: run

Я добавил задание cron на свой хост:

* * * * * cd /home/mydomain/public_html/ && php artisan schedule:run >> /dev/null 2>&1

И файл ядра:

protected function schedule(Schedule $schedule)
{
   file_put_contents(base_path('public/temp/test.txt'),'test_string');
}

Но он не создает файл, и когда я добавил его в свое задание cron, он создает папки каждую минуту.

* * * * * cd /home/mydomain/public_html/ && mkdir test_folder >> /dev/null 2>&1

И когда я запускаю эту команду в терминале php artisan schdule:run, он создает файл test.txt.


person paranoid    schedule 03.12.2019    source источник
comment
когда вы хотите создать файл?   -  person TsaiKoga    schedule 03.12.2019
comment
Папка public/temp существует?   -  person Jerodev    schedule 03.12.2019
comment
@Jerodev Да, конечно   -  person paranoid    schedule 03.12.2019
comment
Ваш cronjob работает? просто твоя команда не работает?   -  person ali Falahati    schedule 03.12.2019
comment
Можете ли вы протестировать другую команду. например Log :: info ('это тест'). если он работает, вы должны изменить base_path на абсолютный путь   -  person ali Falahati    schedule 03.12.2019
comment
@TsaiKoga это команда расписания тестирования. Другое дело мой график. Я перехожу на это file_put_contents(base_path('public/temp/tset.txt'),'test_string');, чтобы убедиться, что расписание запущено   -  person paranoid    schedule 03.12.2019
comment
@TsaiKoga я редактирую свой пост   -  person paranoid    schedule 03.12.2019
comment
@aliFalahati Я редактирую свой пост   -  person paranoid    schedule 03.12.2019


Ответы (2)


Потому что вы не назвали это $schedule,

проверьте это: https://laravel.com/docs/5.8/scheduling#defining-schedules

И ваш код должен быть таким:

protected function schedule(Schedule $schedule)
{
   $schedule->call(function () {
       if (!file_exists(public_path('temp'))) {
          mkdir(public_path('temp') , 0777);
       }
       file_put_contents(base_path('public/temp/tset.txt'),'test_string');
   })->dailyAt('2:10');  
}

Если вы используете php artisan schedule:run, он автоматически запускает события: " расписание: запуск исходного кода "

И у вас нет никаких событий, будет отображаться No scheduled commands are ready to run..

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

person TsaiKoga    schedule 03.12.2019
comment
Это не создает файл. - person paranoid; 03.12.2019
comment
@paranoid Попробуйте это в своем cron: * * * * * /your_php_path/bin/php /home/mydomain/public_html/artisan schedule:run >> /dev/null 2>&1 - person TsaiKoga; 03.12.2019
comment
@paranoid проверьте статус crontab ps aux | grep crond, он работает? - person TsaiKoga; 03.12.2019
comment
результат: 237 0,0 0,0 6492 604? SN + 03:19 0:00 grep --color crond - person paranoid; 03.12.2019
comment
@paranoid Кажется, ваша служба cron не работает. попробуйте запустить /etc/init.d/crond start или service crond start - person TsaiKoga; 03.12.2019
comment
мой SHH находится на хосте и не может запустить service crond start. Я думаю, что эта служба запущена, потому что я запускаю ее * * * * * cd /home/mydomain/public_html/ && mkdir test_folder >> /dev/null 2>&1, она создает test_folder - person paranoid; 03.12.2019
comment
@paranoid попробуйте следующее: * * * * * /your_php_path/bin/php /home/mydomain/public_html/artisan schedule:run >> /your_path/output.txt и проверьте output.txt, см. сообщение. - person TsaiKoga; 03.12.2019
comment
Он не создает файл output.txt - person paranoid; 03.12.2019
comment
@paranoid Я попробовал в своем env, независимо от того, что ваша команда неверна, она все равно создаст output.txt, если только служба cron не запущена или ваш путь неверен. - person TsaiKoga; 04.12.2019

оберните вашу функцию $schedule

$schedule->call(function () {
    file_put_contents(base_path('public/temp/tset.txt'),'test_string');
})->everyFiveMinutes();

Или создайте command class и запустите его

Прочтите Определение расписаний

person Abdulla Nilam    schedule 03.12.2019
comment
Я добавил это, но доза не создала файл - person paranoid; 03.12.2019
comment
попробуйте Storage::append('tset.txt', 'Appended Text'); и сначала проверьте - person Abdulla Nilam; 03.12.2019