Page 1 of 3

php скрипт в cron

Posted: Mon Jun 17, 2013 9:13 am
by AlexART
Доброго времени суток,

не срабатывает задание в кроне.

вызываю с кроне

Code: Select all

sudo /usr/local/vesta/php/bin/php /home/admin/script.php
Через консоль(putty) данная команда проходит на ура.

Сам скрипт:

Code: Select all

#!/usr/local/vesta/php/bin/php
<?php
function vesta_api_query($params) {
		$answer = exec( 'sudo -u root -S ' . '/usr/local/vesta/bin/'.$params['cmd'].' '.$params['arg1'].' '.$params['arg2'].' true < secret.srt');
		// Check result
		return $answer;
}

function General(){
	$params['cmd'] = 'v-unsuspend-web-domain';
	$params['arg1'] = 'admin';
	$params['arg2'] = 'test.domain.com';

	 vesta_api_query($params);
}
General();
?>
Данный скрипт необходим, он будет брать инфу из БД и работать с ней, а по итогам работы будет совершать автоматически блокировку или разблокировку домена.

Посоветуйте пожалуйста, почему не срабатывает через крон данный скрипт?


Если написать скрипт типа:

Code: Select all

#!/usr/local/vesta/php/bin/php
<?php
file_put_contents('test.txt','Test message', FILE_APPEND);
?>
все в порядке, создается файл с текстом. А вот exec() не срабатывает, почему?

Re: php скрипт в cron

Posted: Mon Jun 17, 2013 9:29 am
by skid
Под каким пользователем запускаете крон?

Re: php скрипт в cron

Posted: Mon Jun 17, 2013 9:35 am
by AlexART
я через vestacp добавляю задание в крон, а она(панель) не под рутом? а в панели задаю задание под admin'ом

Re: php скрипт в cron

Posted: Mon Jun 17, 2013 9:58 am
by skid
Веб-интерфейс работает под пользователем admin и только ему можно использовать sudo без пароля. Только вот без пароля, admin может запускать только скрипты из /usr/local/vesta/bin/. Задание "sudo /usr/local/vesta/php/bin/php /home/admin/script.php" не попадает под это условие.

Добавьте скрипту /home/admin/script.php флаг на исполнение

Code: Select all

chmod +x /home/admin/script.php
И запускайте его без sudo и без указания интерпритатора

Code: Select all

* * * * * /home/admin/script.php

Внутри скрипта у вас есть вызов sudo который сработает. Правда, я не до конца понимаю что там за перенаправление из файла secret.srt. Для тестов попробуйте начать с кода попроще

Code: Select all

#!/usr/local/vesta/php/bin/php
<?php
echo exec( 'sudo -u root -S ' . '/usr/local/vesta/bin/v-list-sys-config');

Re: php скрипт в cron

Posted: Mon Jun 17, 2013 10:33 am
by AlexART
указание скрипта в задании без sudo и интерпритатора, не дает вообще ни какой реакции. Даже элементарный скрипт создания файла и записи в него не срабатывает.
У файла скрипта права на выполнение имеются.
Попытка выполнить его через bash приводит к следующему:

Code: Select all

 -bash: ./script.php: /usr/local/vesta/php/bin/php^M: bad interpreter: No such file or directory 

Re: php скрипт в cron

Posted: Mon Jun 17, 2013 10:51 am
by skid
Судя по выводу, дело в переводе картетки. Переформатируйте скрипт на сервере и попробуйте перезапустить.

Re: php скрипт в cron

Posted: Mon Jun 17, 2013 11:50 am
by AlexART
Спасибо, скрипт выполняется из консоли, но из крона не выполняется. Текст лога пишется, значит сам файл читается и выполняется, но не команда обращения v-suspend-web-domain, тк о её работе ни слова в логе. Тогда как из консоли выполняется полностью и в логах пишется все.
Никак не пойму, что не так. Получается что команда из exec не выполняется.

Re: php скрипт в cron

Posted: Mon Jun 17, 2013 12:10 pm
by skid
Попробуйте сделать тестовый скрипт и добавтье его в крон.

Code: Select all

#!/usr/local/vesta/php/bin/php
<?php
exec( 'sudo -u root -S /usr/local/vesta/bin/v-list-web-domains admin json', $output, $return_var);
unlink('/tmp/test-log.txt');
$fp = fopen('/tmp/test-log.txt', 'w');
foreach($output as $str){
    echo $str."\n";
    fwrite($fp, $str."\n");
}
fclose($fp);
Потом проверьте содержимое файла /tmp/test-log.txt

Re: php скрипт в cron

Posted: Mon Jun 17, 2013 12:41 pm
by AlexART
Если скрипт выполняется кроном, то test-log.txt весом 0 байт, пустой.
А если выполнить через консоль, то test-log.txt вполне весомый и полон всякой инфы.

Дело в кроне получается? Не дает выполнить скрипт полноценно.

Я в основном девелопер по мелкософтовской системе, на Linux совсем еще школьник. Поэтому прошу прощения за возможно глупые вопросы.

Re: php скрипт в cron

Posted: Mon Jun 17, 2013 1:06 pm
by skid
Разобрался, тут моя невнимательность. Нехватало переменной VESTA, она объявлена в третьей строке.

Code: Select all

#!/usr/local/vesta/php/bin/php
<?php
putenv("VESTA=/usr/local/vesta");
exec( 'sudo /usr/local/vesta/bin/v-list-web-domains admin json', $output, $return_var);
unlink('/tmp/test-log.txt');
$fp = fopen('/tmp/test-log.txt', 'w');
foreach($output as $str){
    echo $str."\n";
    fwrite($fp, $str."\n");
}
fclose($fp);