Страница 1 из 2

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

Добавлено: 31 мар 2016, 19:00
Anagar
Помогите пожалуйста сообразить как правильно писать выполнение задания 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

Сам по себе, с браузера, скрипт работает. Но в кроне нет. Что я делаю не так, подскажите пожалуйста!?

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

Добавлено: 01 апр 2016, 01:37
GeekHacker
*/1 * * * *

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

Добавлено: 01 апр 2016, 01:42
GeekHacker
Правда, лично меня ещё моменты в самом скрипте смущают. Но это уже другая история.

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 не работает.

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

Добавлено: 01 апр 2016, 14:39
Asmodey
А откуда в консольном скрипте будут данные в сессии?

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

Добавлено: 10 апр 2016, 16:06
Anagar
Максим писал(а):Во первых время: */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 находятся в одном каталоге.

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

Добавлено: 10 апр 2016, 16:14
Anagar
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();
?>

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

Добавлено: 10 апр 2016, 16:19
Asmodey
Если в консоли ручками запустить скрипт отрабатывает?

К тому, что есть сомнение на счёт include.
Лучше считать, что скрипт заводится из какой-то совсем левой рабочей папки. Посему, надо перейти хотя бы туда, где находится сам скрипт.

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

Добавлено: 10 апр 2016, 16:41
Anagar
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();
?>

А в консоли я не умею запускать скрипты( Но с браузера все ок работает.

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

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