Запуск bash скрипта с Веб-страницы

Thund3r

Новичок
Спасибо, что откликнулись!
Linux (Clearos -шлюз)
Apache/2.2.15 (ClearOS Core)
PHP Version 5.3.3
Задача: Создать PHP код для передачи Bash скрипту(script.sh) переменной из массива $_SERVER[] IP адрес терминала. Для лучшего мониторинга за выполнением скрипта используется программа Task spooler (ts).

PHP:
<?php
$run = "ts /var/www/html/script.sh {$_SERVER['REMOTE_ADDR']}";
exec($run);
?>
В логах Апач и РНР ошибок нет. Программа ts задачу на выполнение не получает. Прошу ПОМОГИТЕ!!!
 

WMix

герр M:)ller
Партнер клуба
имеет смысл запустить в ручном режиме
Код:
$ ts /var/www/html/script.sh localhost
вижу две проблемы
1. написать полный путь для ts
Код:
$ whereis ts
2. убедиться что тот пользователь который вызывает (www-data) имеет право запускать ts
Код:
$ ls -la /path/to/ts
 

Thund3r

Новичок
Большое спасибо, но эти дерективы я добавил, да и в php.ini они включены!
имеет смысл запустить в ручном режиме
Код:
$ ts /var/www/html/script.sh localhost
вижу две проблемы
1. написать полный путь для ts
Код:
$ whereis ts
2. убедиться что тот пользователь который вызывает (www-data) имеет право запускать ts
Код:
$ ls -la /path/to/ts
Большое спасибо! В сторону этих двух проблем смотрел сразу, но:
1) добавления пути, в моем случае /usr/local/bin/ts, не помогло. Сразу не отходя от темы: Может нужно перенести ts в другую папку не local?
2)вывод команды -rwxr-xr-x. 1 root root 125463 Mar 22 22:43 /usr/local/bin/ts т.е. выполнять можно всем... Я выполнял команду +x.
Да, и совсем забыл, в терминале ввожу команду в ручном режиме... и она выполняется!!!
 

WMix

герр M:)ller
Партнер клуба
Код:
$ls -la /var/www/html/script.sh
а у скрипта как с правами

а вообще можне выполнять непосредственно от www (www-data) на фряхе написал бы так
Код:
# su www; ts /var/www/html/script.sh localhost
что значит не работает?

PHP:
echo $run;
exec($run, $output);
print_r($output);
Может нужно перенести ts в другую папку не local?
просто пиши полный путь
 

fixxxer

К.О.
Партнер клуба
PHP:
ini_set('display_errors',1);
error_reporting(E_ALL);
header('Content-Type: text/plain');
$run = "/usr/local/bin/ts {$_SERVER['REMOTE_ADDR']} 2>&1";
system($run, $code);
var_dump($code);
 

Thund3r

Новичок
Код:
$ls -la /var/www/html/script.sh
а у скрипта как с правами

а вообще можне выполнять непосредственно от www (www-data) на фряхе написал бы так
Код:
# su www; ts /var/www/html/script.sh localhost
что значит не работает?

PHP:
echo $run;
exec($run, $output);
print_r($output);

просто пиши полный путь
1) На всякий случай дал все :)
2)Думаю от какого пользователя запускается процесс... Вывод команды cat /etc/passwd | sed 's/\:.*//' не дал ничего подобного, только Apache, но это не то...
3)За этот совет большое спасибо, что-то не пришел в голову... Но в выводе Array ( [0] => 1 )... Как такое может быть не понимаю... отдельно echo $_SERVER['REMOTE_ADDR'] дает IP :(
Может shell_exec, а не exec ? И что такое ts ?
Сейчас попробую... Я в начале писал на счет ts по сути это пул для скриптов...
 

Thund3r

Новичок
PHP:
ini_set('display_errors',1);
error_reporting(E_ALL);
header('Content-Type: text/plain');
$run = "/usr/local/bin/ts {$_SERVER['REMOTE_ADDR']} 2>&1";
system($run, $code);
var_dump($code);
На сколько я понял, Ваш совет похож на ответ WMIX, за исключением header, что в этой ситуации не очень помогло... а var_dump дало чуть более полную информацию. Вот вывод:
PHP:
array(1) {
  [0]=>
  string(1) "3"
Пробую с ним разобраться ... откуда 0. Посмотрел на предыдущий вывод и ошибся... Индексу 0 присвоена строка... Только почему всего лишь "3" а не IP.
 

fixxxer

К.О.
Партнер клуба
header нужно просто чтобы не объяснять что смотреть надо во view source )

в $code не может быть массива, там должен быть int, код возврата, 0 = все хорошо, иначе = код ошибки (юниксовый errno)

этот код точно запускается отдельно, или там еще вокруг куча всего?
 

Thund3r

Новичок
header нужно просто чтобы не объяснять что смотреть надо во view source )

в $code не может быть массива, там должен быть int, код возврата, 0 = все хорошо, иначе = код ошибки (юниксовый errno)

этот код точно запускается отдельно, или там еще вокруг куча всего?
Спасибо! Теперь понятно! Да, только одна строка... вернее три :) Нужно передать скрипту IP адрес и все... Не понимаю откуда проблема... И наверное какая-то мелочь...
 

Thund3r

Новичок
Создал простой скрипт

PHP:
#!/bin/bash

mkdir testdir
cd testdir
touch file1  file2
не создало :(
 

Thund3r

Новичок
Что делать даже touch не запускается, а ls работает? Может не хватает прав? Сейчас гляну.
-rwxr-xr-x. 1 0 0 49052 Jun 21 2012 /bin/touch
Всем позволено выполнять, правильно?
 

WMix

герр M:)ller
Партнер клуба
иногда нужно дать время подумать, изредко, когда мыслей нет, почитывай топик с самого начала (кстати safe mode проверь)
 

Thund3r

Новичок
Вы имеете в виду safe_mode_exec_dir в php.ini Стоит по умолчанию safe_mode_exec_dir=
Спасибо будем думать :)
 
Сверху