【发布时间】:2016-04-14 12:57:23
【问题描述】:
尝试从 php 执行 bash 脚本(内部带有 ssh 命令),但不能像在 CLI 上那样执行。
这是 bash 脚本的 sn-p (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 成功返回,但是在使用 php 执行时
$exec3 = shell_exec('deploy_to_nagios.sh '.' '.$server.' '.$carrier.' '.$nag_manage_server.' '.$nag_manage_user);
找不到文件。我的猜测是 php 单独运行 ssh 和 ls 命令,这就是找不到文件的原因。 有没有办法让 php 执行的行为与 CLI 上的行为相同,将这两个命令视为一个?
【问题讨论】:
-
澄清:deploy_to_nagios.sh 或 /usr/local/nagios/health_check_${CARRIER}.cfg 找不到?
-
不确定你说的是哪个文件找不到,但如果你担心,那为什么不直接使用文件的完整路径呢?
-
通过 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} 上?