运行 php linux 服务器中的脚本来自另一个 php 使用 ssh 和 shell 的脚本
Run php script in linux server from another php script using ssh and shell
我可以 运行 位于 linux 服务器中的 php 脚本如下:
nclude('/Net/SSH2.php');
$ssh = new Net_SSH2('ip address');
if (!$ssh->login('user name', 'password')) {
exit('Login Failed');
}
echo $ssh->exec('/usr/bin/nohup php /path/to/script/run.php > /path/to/log/run_log.log 2>&1 &');
现在我需要添加一些代码如下,这样它就会回复完成工作。
$output = shell_exec('if [ $? -eq "0" ];then echo "All done" else echo "Not Work" fi');
echo $output;
但它不起作用。意味着 run.php
运行s 在 linux 服务器中但是当它完成时,$output
不打印任何东西。能否请你帮忙?
所以这是我的答案:
$pid=0;
$pid=$ssh->exec("(ps -ef | grep run.php | grep -v grep | awk '{print }')");
while ($pid >0)
{
echo "Process id when running=".$pid."\n";
$pid =$ssh->exec("(ps -ef | grep run.php | grep -v grep | awk '{print }')");
}
echo "Process is not running \n";
解释:
从 Linux 输出将如下所示
bash-3.2$ ps -ef | grep run.php
506 1455 1 3 10:56 ? 00:00:02 /path/to/script/run.php
所以 awk '{print $2}' 将提供值 1455,这是进程的 pid
我可以 运行 位于 linux 服务器中的 php 脚本如下:
nclude('/Net/SSH2.php');
$ssh = new Net_SSH2('ip address');
if (!$ssh->login('user name', 'password')) {
exit('Login Failed');
}
echo $ssh->exec('/usr/bin/nohup php /path/to/script/run.php > /path/to/log/run_log.log 2>&1 &');
现在我需要添加一些代码如下,这样它就会回复完成工作。
$output = shell_exec('if [ $? -eq "0" ];then echo "All done" else echo "Not Work" fi');
echo $output;
但它不起作用。意味着 run.php
运行s 在 linux 服务器中但是当它完成时,$output
不打印任何东西。能否请你帮忙?
所以这是我的答案:
$pid=0;
$pid=$ssh->exec("(ps -ef | grep run.php | grep -v grep | awk '{print }')");
while ($pid >0)
{
echo "Process id when running=".$pid."\n";
$pid =$ssh->exec("(ps -ef | grep run.php | grep -v grep | awk '{print }')");
}
echo "Process is not running \n";
解释: 从 Linux 输出将如下所示
bash-3.2$ ps -ef | grep run.php
506 1455 1 3 10:56 ? 00:00:02 /path/to/script/run.php
所以 awk '{print $2}' 将提供值 1455,这是进程的 pid