2016-04-14 20 views
1

phpからbashスクリプト(sshコマンド付き)を実行しようとしましたが、CLI上で実行された方法では動作しません。ここでphp sshでbashスクリプトを呼び出す

はbashスクリプト(deploy_to_nagios.sh)の抜粋です:

#!/bin/bash -x 
SERVER=$1 
CARRIER=$2 
MANAGEMENT_NAGIOS_SERVER=$3 
MANAGEMENT_NAGIOS_USER=$4 

ssh -q ${MANAGEMENT_NAGIOS_USER}@${MANAGEMENT_NAGIOS_SERVER} "ls /usr/local/nagios/health_check_${CARRIER}.cfg" 

は、CLIでdeploy_to_nagios.shを実行に成功返しますが、ファイルはできません

$exec3 = shell_exec('deploy_to_nagios.sh '.' '.$server.' '.$carrier.' '.$nag_manage_server.' '.$nag_manage_user); 

を使用してPHP上で実行されるとき見つけられた。私の推測では、phpはsshコマンドとlsコマンドを別々に実行しているため、ファイルが見つからないのです。 PHPの実行方法はCLIと同じですが、それらの2つのコマンドを1つとして扱う方法はありますか?

+0

明確化:deploy_to_nagios.shまたは/usr/local/nagios/health_check_${CARRIER}.cfgを見つけることができないのですか? –

+0

あなたが話しているファイルが見つからないことがわかりませんが、心配しているのであれば、ファイルの完全なパスを使用しないのはなぜですか? – drewyupdrew

+0

PHP経由でdeploy_to_nagios.shを実行しているときに "/usr/local/nagios/health_check_${CARRIER}.cfg"が見つかりません。しかし、CLI経由でdeploy_to_nagios.shを実行すると、そのファイルが見つかります。私の推測では、PHPが "ls /usr/local/nagios/health_check_${CARRIER}.cfg"をssh -q $ {MANAGEMENT_NAGIOS_SERVER $ {MANAGEMENT_NAGIOS_USER}から別々のコマンドコマンドとして実行しているので、代わりにローカルサーバ上で探しているようです$ {MANAGEMENT_NAGIOS_USER}にありますか? – user4298197

答えて

0

このプロジェクトでは、PHPがsshを使用して実際のBashシェルを取得して操作できるようになります。ここをクリックしてください:https://github.com/merlinthemagic/MTS

次に、bashスクリプトを起動するか、コマンドを直接実行してください。直接bashで例外ロジックを構築するのではなく、リターンを直接処理できます。あなたは、単に次のコードを使用しますダウンロードした後

//get a remote bash shell on server: MANAGEMENT_NAGIOS_SERVER 
$shell = \MTS\Factories::getDevices()->getRemoteHost(MANAGEMENT_NAGIOS_SERVER)->getShellBySsh(MANAGEMENT_NAGIOS_USER, 'secretPassword'); 

//execute the ls command (--color=none to avoid special chars from terminal colors) 
$return1 = $shell->exeCmd('ls --color=none /usr/local/nagios/health_check_${CARRIER}.cfg'); 

echo $return1; //ls return