Как запустить bash-файл из php

Тема в разделе "Как сделать...", создана пользователем HEPB, 22 мар 2012.

  1. HEPB

    HEPB Постоялец

    Регистр.:
    24 июн 2009
    Сообщения:
    111
    Симпатии:
    8
    Подскажите, плиз, где собака порылась.
    Есть VDS-сервер на ОС debian 5 minimal

    В папке /etc/init.d/tr (файл на языке bash) права 755 даны.

    Есть на php - функция:

    PHP:
        public static function control($action)
        {
           
            
    $handle popen("sudo " ConstTrans::TRANS_INITSCRIPT " " $action'r');
            while (!
    feof($handle)) {
                
    $reply .= fgets($handle4096);
            }
            return 
    $reply;
        }
    в константе ConstTrans::TRANS_INITSCRIPT содержится путь к файлу /etc/init.d/tr
    Функция вызывается по кнопке из админки файла. Так вот, почему то не работает. Каких то прав не хватает или еще чего то. Подскажите, в чем проблема может быть!
     
  2. DrakonHaSh

    DrakonHaSh

    Регистр.:
    29 июн 2010
    Сообщения:
    358
    Симпатии:
    122
    1. popen может быть в disabled functions
    2. sudo может быть или запрещен для юзера, от имени которого запускается скрипт, или может требовать ввод пароля.
     
    HEPB нравится это.
  3. noxwell

    noxwell Создатель

    Регистр.:
    23 июн 2011
    Сообщения:
    13
    Симпатии:
    9
    В /etc/sudoers ты должен разрешить Apache запускать твой скрипт без запроса пароля. Добавь в конец /etc/sudoers:
    Код:
    apache_username ALL=NOPASSWD: /etc/init.d/tr
    и замени apache_username на имя пользователя, из-под которого у тебя запускается Apache.
     
    HEPB нравится это.
  4. HEPB

    HEPB Постоялец

    Регистр.:
    24 июн 2009
    Сообщения:
    111
    Симпатии:
    8
    у меня операционка дебиан. может поэтому?
    /etc/sudoers нет такого файла у меня.
     
  5. noxwell

    noxwell Создатель

    Регистр.:
    23 июн 2011
    Сообщения:
    13
    Симпатии:
    9
    Подключись к vds-ке через ssh как root, выполни команду visudo и редактируй этот файл. И ты точно знаешь, из-под какого пользователя у тебя запускается Apache? Если нет, то из под рута выполни команду ps aux | grep apache и выложи вывод сюда.​
     
  6. HEPB

    HEPB Постоялец

    Регистр.:
    24 июн 2009
    Сообщения:
    111
    Симпатии:
    8
    кстати, а как узнать, из-под кого запускается Апач? Вообще у меня только root - пользователь. других не делал
    <-------------- добавлено через 56 сек. -------------->
    root@sst:~# visudo
    -bash: visudo: command not found
     
  7. HEPB

    HEPB Постоялец

    Регистр.:
    24 июн 2009
    Сообщения:
    111
    Симпатии:
    8
    Апач стартует автоматом при рестарте сервака, он прописан в etc/init.d
    <-------------- добавлено через 57 сек. -------------->
    www-data 8044 0.0 1.4 26484 7680 ? S 07:23 0:00 /usr/sbin/apach e2 -k start
    www-data 8046 0.0 1.3 26392 7040 ? S 07:23 0:00 /usr/sbin/apach e2 -k start
    www-data 8066 0.0 1.4 26688 7748 ? S 07:24 0:00 /usr/sbin/apach e2 -k start
    www-data 8095 0.0 1.5 27424 7948 ? S 07:25 0:00 /usr/sbin/apach e2 -k start
    root 8613 0.0 0.3 25196 2056 ? Ss Feb26 0:29 /usr/sbin/apach e2 -k start
    www-data 9434 0.0 1.4 26840 7436 ? S 08:41 0:00 /usr/sbin/apach e2 -k start
    www-data 9596 0.0 1.3 26680 7212 ? S 08:45 0:00 /usr/sbin/apach e2 -k start
    www-data 9598 0.0 0.6 25716 3328 ? S 08:45 0:00 /usr/sbin/apach e2 -k start
    www-data 9695 0.0 1.3 26688 7028 ? S 08:51 0:00 /usr/sbin/apach e2 -k start
    www-data 9748 0.0 1.2 26416 6600 ? S 08:54 0:00 /usr/sbin/apach e2 -k start
    www-data 9807 0.0 1.4 27244 7640 ? S 08:57 0:00 /usr/sbin/apach e2 -k start
    root 9889 0.0 0.0 1720 516 pts/0 S+ 09:01 0:00 grep apache
     
  8. HEPB

    HEPB Постоялец

    Регистр.:
    24 июн 2009
    Сообщения:
    111
    Симпатии:
    8
    visudo - неизвестная команда
     
  9. noxwell

    noxwell Создатель

    Регистр.:
    23 июн 2011
    Сообщения:
    13
    Симпатии:
    9
    Очень странно, как так нету /etc/sudoers и visudo. Попробуй:
    Код:
    touch /etc/sudoers
    nano /etc/sudoers
    Вставь туда:
    Код:
    www-data ALL=NOPASSWD:/etc/init.d/tr
    Сохрани файл сочетанием Ctrl-O. Выход Ctrl-X

    offtop: не добавляй новые сообщения, редактируй последнее.
     
  10. HEPB

    HEPB Постоялец

    Регистр.:
    24 июн 2009
    Сообщения:
    111
    Симпатии:
    8
    файл создать то могу и без редактора nano...

    Посмотрел сейчас лог апача. и вот что увидел:
    то есть нет такой команды sudo!
    это команда убунту, в debian ее нет? или надо какой-то пакет установить?

    ну вроде понял теперь. надо убрать вначале sudo и все по крайней мере файл запускается. дальше копать дальше буду...