У меня есть PHP-скрипт, который запускает bat-файл на компьютере с помощью окнаЧто такое Linux эквивалент запуска файла .bat на окна из PHP с использованием системы()
$ результат = система ("CMD/C nameOfBatchFile.bat ");
Это устанавливает некоторые переменные окружающей среды и используется для вызова API Amazon EC2 из командной строки.
Как мне сделать то же самое с сервера Linux? Я переименовал свой .bat-файл в оболочку (.sh) и изменил скрипт на использование «export» при настройке 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
я смог запустить этот файл из командной строки, так что я знаю, что команды работают нормально. Когда я работал над окнами, при запуске экземпляра произошла задержка, и я мог бы эхо результатов на экране. Теперь нет задержек, как будто ничего не происходит.
Я не знаю, что вам нужно разрешение на выполнение, если вы передаете его прямо в оболочку? – paxdiablo
ok Я попробовал это, но он все еще не запускает файл. Является ли путь к файлу относительно PHP-скрипта? Я проверял права доступа к файлам, и они 777 – undefined
Скрипт не нуждается в разрешениях на выполнение, потому что вы его не выполняете - вы выполняете '/ bin/sh' и передаете ему сценарий для запуска. – meagar