2016-04-14 27 views
1

Bir bash betiğini (ssh komutuyla) php'den çalıştırmayı denedim, ancak CLI üzerinde yürütüldüğü şekilde çalışmıyor. CLIphp ile bash betiğinin çağrılması

#!/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" 

Running deploy_to_nagios.sh başarıyla döndürür, ancak php üzerinde çalıştırıldığında

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

dosyası olamaz kullanarak: Burada

bash script pasajı ( deploy_to_nagios.sh) 'dir bulunan. Tahminimce php ssh ve ls komutlarını ayrı olarak çalıştırıyor, bu yüzden dosya bulunamıyor. php yürütme CLI ile aynı davranır bir yolu var, bu 2 komutları tek olarak ele?

+0

netleştirin: deploy_to_nagios.sh veya /usr/local/nagios/health_check_${CARRIER}.cfg bulunamıyor? –

+0

Hangi dosya hakkında konuştuğunuzdan emin olamazsınız, ancak bunun için endişeleniyorsanız, neden sadece dosyanın tam yolunu kullanmıyorsunuz? – drewyupdrew

+0

"/usr/local/nagios/health_check_${CARRIER}.cfg" ifadesi, deploy_to_nagios.sh dosyasını php ile çalıştırırken bulunamıyor. Ancak bu dosya CLI aracılığıyla deploy_to_nagios.sh dosyası çalıştırılırken bulunabilir. Tahminimce php, "ls /usr/local/nagios/health_check_${CARRIER}.cfg" komutunu ssh -q $ {MANAGEMENT_NAGIOS_SERVER $ {MANAGEMENT_NAGIOS_USER} 'dan ayrı komut komutu olarak çalıştırıyor. $ {MANAGEMENT_NAGIOS_USER} tarihinde? – user4298197

cevap

0

Bu proje, PHP'nin gerçek bir Bash kabuğunu ssh ile elde etmesine ve etkileşime girmesine izin verecektir. Buradan edinin: Daha sonra ya bas komut dosyasını tetikleyin veya komutu doğrudan çalıştırın. Doğrudan, bash'ta istisna mantığı oluşturmak yerine geri dönüşü ele almanızı sağlar. sadece şu kodu kullanırsınız indirdikten sonra

:

//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