Планировщик. Как правильно.

Обсуждение других вопросов связанных с веб-разработкой
Anagar
Сообщения: 15
Зарегистрирован:
26 авг 2015, 19:46

Планировщик. Как правильно.

Anagar » 31 мар 2016, 19:00

Помогите пожалуйста сообразить как правильно писать выполнение задания cron.
Как пишу я:
Время: /1 * * * * (каждую минуту)
Выполнить: %progdir%\modules\php\%phpdriver%\php-win.exe -c %progdir%\userdata\temp\config\php.ini -q -f %sitedir%\redneck\crone.php

Если что open server у меня располагается по адресу: C:\OpenServer
Скрипт который нужно выполнить лежит в: C:\OpenServer\domains\redneck
Содержимое скрипта:
<?php
session_start();
include("db_reg.php");
$e_login = $_SESSION['l_hp'];
$e_password = $_SESSION['p_hp'];
$STH = $DBH->query("SELECT * FROM resours WHERE login='$e_login' AND password='$e_password'");
$STH->setFetchMode(PDO::FETCH_ASSOC);
$rez = $STH->fetch();
$bar = $rez['bar'] + 1;
$STH = $DBH->prepare("UPDATE resours SET bar='".$bar."' WHERE login='$e_login' AND password='$e_password'");
$STH->execute();
?>

Логи:
31 Mar 18:43:20 Start nnCron
31 Mar 18:43:20 Load cron.tab

Сам по себе, с браузера, скрипт работает. Но в кроне нет. Что я делаю не так, подскажите пожалуйста!?
GeekHacker
Сообщения: 125
Зарегистрирован:
24 авг 2015, 15:22

Re: Планировщик. Как правильно.

GeekHacker » 01 апр 2016, 01:37

*/1 * * * *
GeekHacker
Сообщения: 125
Зарегистрирован:
24 авг 2015, 15:22

Re: Планировщик. Как правильно.

GeekHacker » 01 апр 2016, 01:42

Правда, лично меня ещё моменты в самом скрипте смущают. Но это уже другая история.
Аватара пользователя
Максим
Сообщения: 5414
Зарегистрирован:
11 дек 2010, 20:29
Контактная информация:

Re: Планировщик. Как правильно.

Максим » 01 апр 2016, 01:45

Во первых время: */1 * * * *
Во вторых неверный путь до ini файла, вот верный:
%progdir%\modules\php\%phpdriver%\php-win.exe -c %progdir%\modules\php\%phpdriver%\php.ini -q -f %sitedir%\redneck\crone.php
В третьих: скрипт написан неправильно, не используется chdir. Поэтому include не работает.
Аватара пользователя
Asmodey
Сообщения: 339
Зарегистрирован:
18 апр 2012, 10:33
Контактная информация:

Re: Планировщик. Как правильно.

Asmodey » 01 апр 2016, 14:39

А откуда в консольном скрипте будут данные в сессии?
Anagar
Сообщения: 15
Зарегистрирован:
26 авг 2015, 19:46

Re: Планировщик. Как правильно.

Anagar » 10 апр 2016, 16:06

Максим писал(а):Во первых время: */1 * * * *
Во вторых неверный путь до ini файла, вот верный:
%progdir%\modules\php\%phpdriver%\php-win.exe -c %progdir%\modules\php\%phpdriver%\php.ini -q -f %sitedir%\redneck\crone.php
В третьих: скрипт написан неправильно, не используется chdir. Поэтому include не работает.
"Во первых время: */1 * * * *" - Это как понять? Во первых там всего 5 полей, а в вашем варианте 6. Во вторых в программе первое по значению поле обозначается как поле для минут, второе же для часов и тд... Зачем мне chdir? Файл crone.php и db_reg.php находятся в одном каталоге.
Последний раз редактировалось Anagar 10 апр 2016, 16:18, всего редактировалось 1 раз.
Anagar
Сообщения: 15
Зарегистрирован:
26 авг 2015, 19:46

Re: Планировщик. Как правильно.

Anagar » 10 апр 2016, 16:14

Asmodey писал(а):А откуда в консольном скрипте будут данные в сессии?
Сессии убрал, скрипт заменил на:
<?php
echo getcwd() . "\n";
include("db_reg.php");
$STH = $DBH->prepare("INSERT INTO monstrs VALUES('','mutant-beetle','200','200','2','15','2','6','2')");
$STH->execute();
?>
Последний раз редактировалось Anagar 10 апр 2016, 16:25, всего редактировалось 1 раз.
Аватара пользователя
Asmodey
Сообщения: 339
Зарегистрирован:
18 апр 2012, 10:33
Контактная информация:

Re: Планировщик. Как правильно.

Asmodey » 10 апр 2016, 16:19

Если в консоли ручками запустить скрипт отрабатывает?

К тому, что есть сомнение на счёт include.
Лучше считать, что скрипт заводится из какой-то совсем левой рабочей папки. Посему, надо перейти хотя бы туда, где находится сам скрипт.
Anagar
Сообщения: 15
Зарегистрирован:
26 авг 2015, 19:46

Re: Планировщик. Как правильно.

Anagar » 10 апр 2016, 16:41

Asmodey писал(а):Если в консоли ручками запустить скрипт отрабатывает?

К тому, что есть сомнение на счёт include.
Лучше считать, что скрипт заводится из какой-то совсем левой рабочей папки. Посему, надо перейти хотя бы туда, где находится сам скрипт.
Не знаю что вы этим имели ввиду, но допустим я изменил скрипт на такой и переместил crone.php на порядок выше в новую папку. Результат не изменен - ничего.
<?php
echo getcwd() . "<br>";
chdir('../');
echo getcwd();
include("db_reg.php");
$STH = $DBH->prepare("INSERT INTO monstrs VALUES('','mutant-beetle','200','200','2','15','2','6','2')");
$STH->execute();
?>

А в консоли я не умею запускать скрипты( Но с браузера все ок работает.
Аватара пользователя
Asmodey
Сообщения: 339
Зарегистрирован:
18 апр 2012, 10:33
Контактная информация:

Re: Планировщик. Как правильно.

Asmodey » 10 апр 2016, 18:07

CWD, при запуске скрипта, может отличаться от того места где собственно лежит скрипт.
Есть волшебная константа __DIR__. В ней лежит путь до скрипта! Всегда.
В начале скрипта необходимо сменить CWD - chdir( __DIR__ ). Тогда Вы 100% будете в директории скрипта. И тогда уже всё отсчитывать относительно этого места.
Абсолютные пути - зло! (с)
Ответить