Что такое linux эквивалент запуска .bat файла в Windows из PHP с использованием system () - PullRequest
2 голосов
/ 11 мая 2010

У меня есть скрипт PHP, который запускает файл .bat на моем компьютере с Windows, используя

$ result = system ("cmd / C nameOfBatchFile.bat");

Устанавливает некоторые переменные среды и используется для вызова Amazon EC2 API из командной строки.

Как мне сделать то же самое с сервера Linux? Я переименовал свой файл .bat в оболочку (.sh) и изменил скрипт, чтобы он использовал «экспорт» при настройке env vars. Я проверил, запустив код из терминала замазки, и он делает то, что должен. Так что я знаю, что команды в сценарии хороши. Как мне запустить это из PHP? Я попытался выполнить ту же команду, что и выше, с новым именем файла, и я не получаю никаких ошибок, файл не найден и т. Д., Но он не работает.

С чего мне начать пытаться решить эту проблему?

---------------------------------- ОБНОВЛЕНИЕ ------------ -------------------

Вот скрипт PHP, который вызывает файл оболочки -

function startAmazonInstance() {
$IPaddress = "1.2.3.4"
    $resultBatTemp = system("/cmd /C ec2/ec2_commands.sh");
    $resultBat = (string)$resultBatTemp;
    $instanceId  = substr($resultBat, 9, 10);           
    $thefile = "ec2/allocate_address_template.txt"; 
    // Open the text file with the text to make the new shell file file
    $openedfileTemp = fopen($thefile, "r");
    contents = fread($openedfileTemp, filesize($thefile));
    $towrite = $contents . "ec2-associate-address -i " . $instanceId . " " . $IPaddress; 
    $thefileSave = "ec2/allocate_address.sh"; 
    $openedfile = fopen($thefileSave, "w");
    fwrite($openedfile, $towrite);
    fclose($openedfile);
    fclose($openedfileTemp);
    system("cmd /C ec2/mediaplug_allocate_address_bytemark.sh");    
}

А вот и файл .sh - ec2_commands.sh

#!/bin/bash
export EC2_PRIVATE_KEY=$HOME/.ec2/privateKey.pem
export EC2_CERT=$HOME/.ec2/Certificate.pem
export EC2_HOME=$HOME/.ec2/ec2-api-tools-1.3-51254
export PATH=$PATH:$EC2_HOME/bin
export JAVA_HOME=$HOME/libs/java/jre1.6.0_20
ec2-run-instances -K $HOME/.ec2/privateKey.pem -C $HOME/.ec2/Certificate.pem ami-###### -f $HOME/.ec2/aws.properties

Мне удалось запустить этот файл из командной строки, поэтому я знаю, что команды работают нормально. Когда я работал с окнами, была задержка запуска экземпляра, и я мог выводить результаты на экран. Теперь нет задержки, как будто ничего не происходит.

Ответы [ 4 ]

4 голосов
/ 11 мая 2010

Поместите хэш-бэнг в первую строку вашего сценария оболочки.

#!/bin/bash

Затем присвойте ему исполняемый флаг.

$ chmod a+x yourshellscript

Затем вы можете вызвать его из PHP с системой.

$result = system("yourshellscript");
2 голосов
/ 11 мая 2010
$result = system("/bin/sh /path/to/shellfile.sh");
1 голос
/ 11 мая 2010

Является ли скрипт исполняемым? Если нет, сделайте так:

$ chmod a+x script.sh          # shell

system ("/path/to/script.sh"); // PHP

или запустите через интерпретатор:

system("sh /path/to/script.sh");        // PHP

Указан ли интерпретатор в сценарии оболочки (т. Е. #!/bin/sh строка)?

0 голосов
/ 11 мая 2010

вы пробовали shell_exec ()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...