echo "something" > 当远程 PHP 服务器执行 sh 脚本时文件不起作用

echo "something" > 当远程 PHP 服务器执行 sh 脚本时文件不起作用

我有一个 Web 服务器,其中有用于源服务器管理的硬编码 Web 面板,并且我在 CentOS 上有一个 VPS,当远程服务器请求时,它实际上并不想执行 sh 脚本。

Web 服务器和 CentOS 服务器不在同一台服务器上!!!

我得到了这个 SH 脚本:

#! /bin/bash

SERVER_PORT="xxxx"
SERVER_IP="xxxx"
SERVER_MP="xxxx"
SERVER_MAP="xxxx"
SERVER_GAME="xxxx"

# CODE

OLDID=`cat pid_file 2> /dev/null`
if [ "$OLDID" != "" ]; then
    screen -X -S $OLDID quit
    rm -f pid_file
    sleep 1
fi

if [ "$1" != "stop" ]; then
    PORT_CHECK=`netstat -tuln | grep $SERVER_PORT`
    if [ "$PORT_CHECK" == "" ]; then
        UNIQID=`date +%Y%M%d%H%M%S`
        echo $UNIQID > pid_file
        screen -A -m -d -S $UNIQID ./srcds_run -console -game $SERVER_GAME -ip $SERVER_IP -port $SERVER_PORT -maxplayers $SERVER_MP +map $SERVER_MAP
        echo "true"
    else
        echo "false"
    fi
fi

我得到了这个执行上述脚本的 PHP 脚本:

include('classes/ssh.class.php');
$ssh = new SSH2($ssh_server, $ssh_port); 
if (!$ssh->auth($ssh_user, $ssh_password))
die('nologin');
$ssh->exec("sh /home/...../...../za.sh");
echo $ssh->output(); 
die();

这是我在 $ssh->output() 上得到的结果

未找到屏幕会话。true

当脚本执行时,pid_file 不会被创建,服务器不会启动,除了这个愚蠢的警告之外什么都不起作用。

我究竟做错了什么?

UPD:当我通过 SSH 控制台 (Putty) 执行此脚本时,一切正常:文件正在创建,服务器在屏幕会话中启动。当我通过 PHP ssh 类执行同一脚本时,它无法正常工作。

UPD2:Putty 和 PHP 脚本均以非 root 用户身份登录系统。游戏服务器无需以 root 身份运行。

答案1

试试这个(使用phpseclib,一个纯 PHP SSH 实现):

$ssh = new Net_SSH2($ssh_server, $ssh_port);
if (!$ssh->login($ssh_user, $ssh_password))
die('nologin');
//$ssh->enablePTY();
echo $ssh->exec("sh /home/...../...../za.sh");
die();

如果这对你不起作用,请尝试取消注释$ssh->enablePTY()

相关内容