gpt4 book ai didi

php - 从 CronJob 启动时,Unix .sh 文件工作不正确

转载 作者:太空宇宙 更新时间:2023-11-04 11:06:20 25 4
gpt4 key购买 nike

问题来了。我正在使用中国跟踪单元(不重要)编写跟踪脚本。我的两个文件如下:

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";
}
}
}
}
?>

然后

port_start.sh 代码:

#!/bin/sh
cd /home/path/to/script/

if netstat -tulpn | grep 7778 > /dev/null
then
echo 7778 - Online
else
./7778.php
fi

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

最佳答案

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

关于php - 从 CronJob 启动时,Unix .sh 文件工作不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25108229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com