PHP работает скрипт bash (.sh).dpkg --info работает, но не dpkg -i - PullRequest
0 голосов
/ 26 апреля 2011

Пример PHP-скрипта выглядит следующим образом:

#!/usr/bin/php
    $file = '/private/var/www/app/install.sh';
    if(is_file($file)){
        $output = shell_exec('bash /private/var/www/app/install.sh');
        fwrite(STDOUT, $output."\n");
    }
    exit(0);

install.sh Пример

#!/bin/bash
clear
echo "Executing Install Script..."
dpkg --info /private/var/www/app/app.deb
dpkg -i /private/var/www/app/app.deb
echo "Script Finished"
exit 0

Это выведет итоговые данные dpkg --info, но не запустит dpkg -i. Он не распечатывает никаких ошибок или вообще ничего ...

Кроме того, это выполняется через веб-браузер. Когда скрипт запускается из терминала, он работает нормально. Но в Интернете возвращается только команда info.

Ответы [ 2 ]

1 голос
/ 26 апреля 2011

Вероятно, есть некоторые проблемы безопасности с тем, что вы пытаетесь сделать здесь, и я не буду их комментировать. Тем не менее, я бы предположил, что dpkg -i должен запускаться от имени пользователя root, а ваш веб-сервер (который выполняет скрипт install.sh) не работает от имени пользователя root. С другой стороны, для выполнения команды dpkg --info не нужны привилегии суперпользователя, и поэтому вы увидите ее вывод при выполнении через пользователя веб-сервера. Если вам действительно нужно запустить этот скрипт от имени пользователя root, вы можете посмотреть на конкретную конфигурацию /etc/sudoers. Возможно начать здесь: https://help.ubuntu.com/community/Sudoers

и посмотрите здесь: http://ubuntuforums.org/showthread.php?t=1132821

0 голосов
/ 26 апреля 2011

dpkg --info не требует разрешения root, в то время как dpkg -i.Поскольку вы запускаете скрипт в браузере, это означает, что он запускается пользователем php / apache.Я полагаю, что при большинстве установок у этого пользователя нет прав root.

Чтобы преодолеть это, вы можете создать какой-нибудь процессор, который будет иметь следующий шаг:

createqueue таблица :

  • queue_id
  • отметка времени
  • deb_file
  • is_processed

браузерный скрипт :

  • после нажатия кнопки установить, вставить запись в таблицу очередей.

процессорный скрипт (скажем queue_processor.php) :

  • при запуске, проверьте, есть ли записи в таблице очередей, чья is_processed = 0
  • , если есть:
    • update is_processed = 1
    • обработать этот файл
    • после завершения обработки (установка файла deb), установить is_processed = 2

Последний шаг заключается вустановите queue_processor.php в crontab и укажите его владельца как root:

*   *   *   *   *   root   /path/to/php/binary/php /path/to/your/queue_processor.php
...