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 флаг на исполнение
И запускайте его без sudo и без указания интерпритатора
Внутри скрипта у вас есть вызов 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);