Php 从CronJob启动Unix.sh文件时工作不正确

Php 从CronJob启动Unix.sh文件时工作不正确,php,linux,bash,shell,unix,Php,Linux,Bash,Shell,Unix,问题就在这里。我正在和一个中国跟踪部门一起编写跟踪脚本(不重要)。我的两份文件如下: 7778.php #!/usr/bin/php -q <?php error_reporting(0); set_time_limit(0); $address = 'SERVER IP'; $port = 7778; $q_count = 1; if (($master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {

问题就在这里。我正在和一个中国跟踪部门一起编写跟踪脚本(不重要)。我的两份文件如下:

7778.php

#!/usr/bin/php -q 
<?php
error_reporting(0); 
set_time_limit(0); 

$address = 'SERVER IP'; 
$port = 7778; 
$q_count = 1;

if (($master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) 
{ 
  echo "socket_create() failed, reason: " . socket_strerror($master) . "\n"; 
} 

socket_set_option($master, SOL_SOCKET,SO_REUSEADDR, 1); 

if (($ret = socket_bind($master, $address, $port)) < 0) 
{ 
   echo "socket_bind() failed, reason: " . socket_strerror($ret) . "\n"; 
} 


if (($ret = socket_listen($master, SOMAXCONN)) < 0) 
{ 
  echo "socket_listen() failed, reason: " . socket_strerror($ret) . "\n"; 
} 

$read_sockets = array($master);

//---- Create Persistent Loop to continuously handle incoming socket messages --------------------- 
while (true) 
{ 
    $changed_sockets = $read_sockets; 
    $num_changed_sockets = socket_select($changed_sockets, $write = NULL, $except = NULL, NULL); 
    foreach($changed_sockets as $socket)
    { 
        if ($socket == $master)
        { 
            if (($client = socket_accept($master)) < 0) 
            { 
                echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n"; 
                continue; 
            }
            else
            { 
                array_push($read_sockets, $client);
                print "[".date('Y-m-d H:i:s')."] ".$client." CONNECTED "."(".count($read_sockets)."/".SOMAXCONN.")\r\n";
            }
        }
        else
        { 
            $bytes = @socket_recv($socket, $buffer, 2048, 0); 
            if ($bytes == 0)
            { 
                $index = array_search($socket, $read_sockets); 
                unset($read_sockets[$index]); 
                if (socket_close($client))
                {
                    print "Connection closed\r\n";
                }
            }
            else
            {
                print $buffer."\r\n"; 
            }

            print "All Done\r\n";
            print "---------------------------------------------------------------------------------------------------------\r\n";
            $index = array_search($socket, $read_sockets); 
            unset($read_sockets[$index]); 
            if (socket_close($client))
            {
                print "Connection closed\r\n";
            }
        }
    }
}
?>

现在我要做的是在我的服务器上使用ssh测试脚本,导航到文件目录并键入
“/7778.php”
。这将启动我的php文件,它将打开端口7778,然后我的单元将连接,我的脚本将在屏幕上转储数据/缓冲区。即使我通过键入以下
“/port\u start.sh”
.sh
文件启动脚本,一切都很正常。我还可以使用
Putty
并打开一个
RAW
到我的服务器和端口的连接,它可以正常工作。不知道它是如何工作的,如下所示。该单元将建立连接,脚本将接受该连接并接收数据,然后关闭连接。当我使用以下代码运行cronjob中的
.sh
文件打开端口时,就会出现问题:“*/1****/home/path/to/file/port\u start.sh>/dev/null”。它将打开它,我可以验证它是否打开,但没有任何东西可以连接到它。为什么会这样?

从cronjob工作时,计算机无法找到命令程序。如果程序位于/home/root/bin目录中,您应该像/home/root/bin/netstat一样调用它。。。您可以通过运行“locate netstat”和“locate grep”来定位程序。这可能会解决您的问题。

非常感谢您的回复。就我而言,这不是问题所在。一切都打开了,一切正常。但是我有一个小脚本来检查端口是否打开。我的问题就发生在那里。当我运行脚本时,它会保持端口打开,但会杀死我的脚本。这就是为什么我可以看到港口仍然开放,但什么也不会发生。 如果有人遇到同样的问题,我用于检查端口的脚本如下所示:

        $errno = "";
        $errstr = "";
        $fp = @fsockopen($domain, $port, $errno, $errstr, 2); 
        $status = "";
        if (!$fp) {  
            $status = "<img src='red.gif' alt='Status: Down, Domain: $domain, Port: $port ($errstr)'>\n";  
        } 
        else 
        {  
            $status = "<img src='green.gif' alt='Status: Up, Domain: $domain, Port: $port'>\n";  
        } 
        @fclose($fp); 
$errno=”“;
$errstr=“”;
$fp=@fsockopen($domain,$port,$errno,$errstr,2);
$status=“”;
如果(!$fp){
$status=“\n”;
} 
其他的
{  
$status=“\n”;
} 
@fclose($fp);
但同样,你的回答有道理,但不适用于我

        $errno = "";
        $errstr = "";
        $fp = @fsockopen($domain, $port, $errno, $errstr, 2); 
        $status = "";
        if (!$fp) {  
            $status = "<img src='red.gif' alt='Status: Down, Domain: $domain, Port: $port ($errstr)'>\n";  
        } 
        else 
        {  
            $status = "<img src='green.gif' alt='Status: Up, Domain: $domain, Port: $port'>\n";  
        } 
        @fclose($fp);