Создать три задачи с разными параметрами выполнения: 0, 20 и 40, соответственно
...domains\myproject.loc\bin\cli.php 0 TestCron -x=20 -y=17
...domains\myproject.loc\bin\cli.php 20 TestCron -x=20 -y=17
...domains\myproject.loc\bin\cli.php 40 TestCron -x=20 -y=17
Warning: file_put_contents(C:\1.log): failed to open stream: Permission denied in D:\OpenServer
\OSPanel\domains\myproject.loc\src\MyProject\Cli\TestCron.php on line 18
Согласно рекомендациям в комментариях : php cli.php TestCron -x=20 -y=17 -sleep=20
namespace MyProject\Cli;
class TestCron extends AbstractCommand
{
protected function checkParams()
{
$this->ensureParamExists('x');
$this->ensureParamExists('y');
$this->ensureParamExists('sleep');
}
public function execute()
{
sleep($this->getParam('sleep'));
// чтобы проверить работу скрипта, будем записывать в файлик 1.log текущую дату и время
file_put_contents('D:\\1.log', date(DATE_ISO8601) . PHP_EOL, FILE_APPEND);
echo 'OK';
}
}
Поставить несколько заданий, используя эту задержку, каждую минуту, но со стартом в одно время три задания с 0, 20 и 40 будут выполняться каждые 20 секунд
Будем использовать эту же команду: * php c:\OSPanel\domains\myproject.loc\bin\cli.php TestCron -x=20 -y=17.
И ещё добавим цикл с задержкой 20 секунд в cli.php
for($i=1; $i<=3; $i++) {
sleep(20);
// Создаём экземпляр класса, передав параметры и вызываем метод execute()
$class = new $className($params);
$class->execute();
}
Здравствуйте! А кто вообще занимается настройкой cron в частности? Девопс, сисадмин, бэкендщик?
Ну и хотелось бы поинтересоваться о практическом применении выполнения этих операций под виндой, если учесть, что это объясняется в контексте веб-программирования и cron по умолчанию будет работать на сервере с линуксом.
Да настройки как таковой нет. Есть список команд, которые нужно запускать по расписанию. Кому нужно их запускать, тот и меняет расписание как ему нужно.
В проде конечно будет линукс, это так, в песочнице балуемся. Но разницы никакой не будет в применении, так как расписание будет задаваться по тем же правилам что и здесь, в уроке.
В bin/cli.php добавить задержку исполнения
Создать три задачи с разными параметрами выполнения: 0, 20 и 40, соответственно
...domains\myproject.loc\bin\cli.php 0 TestCron -x=20 -y=17
...domains\myproject.loc\bin\cli.php 20 TestCron -x=20 -y=17
...domains\myproject.loc\bin\cli.php 40 TestCron -x=20 -y=17
Как вариант, неплохо. Но я бы сделал это не в cli.php, а в конкретном скрипте. И передавал бы именованный параметр:
Warning: file_put_contents(C:\1.log): failed to open stream: Permission denied in D:\OpenServer
\OSPanel\domains\myproject.loc\src\MyProject\Cli\TestCron.php on line 18
как доступ открыть?
Измените путь до файла, чтобы туда мог писать ваш текущий пользователь в винде.
Согласно рекомендациям в комментариях : php cli.php TestCron -x=20 -y=17 -sleep=20
Так каким образом запускать каждые 20 секунд? У вас просто задержка перед запуском 20 секунд.
Поставить несколько заданий, используя эту задержку, каждую минуту, но со стартом в одно время три задания с 0, 20 и 40 будут выполняться каждые 20 секунд
Ок
Будем использовать эту же команду: * php c:\OSPanel\domains\myproject.loc\bin\cli.php TestCron -x=20 -y=17.
И ещё добавим цикл с задержкой 20 секунд в cli.php
Результат 1.log:
2019-08-18T09:27:20+0300
2019-08-18T09:27:40+0300
2019-08-18T09:28:00+0300
2019-08-18T09:28:20+0300
2019-08-18T09:28:40+0300
2019-08-18T09:29:00+0300
2019-08-18T09:29:20+0300
2019-08-18T09:29:40+0300
2019-08-18T09:30:00+0300
2019-08-18T09:30:20+0300
2019-08-18T09:30:40+0300
2019-08-18T09:31:00+0300
А если метод execute будет выполняться несколько минут? Как добиться, чтобы остальные всё же стартанули?
Добавить три задержки по 20 c. в execute() класса TestCron. Файл TestCron.php:
А если сама задача выполняется 5 секунд, то следующий запуск произойдет лишь спустя 25 секунд. Так не годится.
Тогда только через Cron. Запланировать вот так (это для Windows старше Vista):
Да, нормальный рабочий вариант)
Отлично!
Здравствуйте! А кто вообще занимается настройкой cron в частности? Девопс, сисадмин, бэкендщик?
Ну и хотелось бы поинтересоваться о практическом применении выполнения этих операций под виндой, если учесть, что это объясняется в контексте веб-программирования и cron по умолчанию будет работать на сервере с линуксом.
Да настройки как таковой нет. Есть список команд, которые нужно запускать по расписанию. Кому нужно их запускать, тот и меняет расписание как ему нужно.
В проде конечно будет линукс, это так, в песочнице балуемся. Но разницы никакой не будет в применении, так как расписание будет задаваться по тем же правилам что и здесь, в уроке.
2021-11-16T19:36:00+0300
2021-11-16T19:36:20+0300
2021-11-16T19:36:40+0300
2021-11-16T19:37:00+0300
2021-11-16T19:37:20+0300
2021-11-16T19:37:40+0300
Почему смещение указано +0300? Хотя в системе установлен часовой пояс +0400
Запускать каждую минуту, сделать 3 задания и добавить второму sleep 20, третьему sleep 40
Норм