我们的生产服务器遇到了 cron 问题。Cron 设置为每 5 分钟执行一次,大多数情况下都有效,但我遇到一个问题,即一项作业可能需要 6 分钟才能处理。第二个 6 分钟的作业直到 10 分钟过去后才会执行,迟早这会成为一个问题。
我已经研究过用 C 编写一个分叉守护进程来监听传入的请求 - 但这也是有问题的,因为这意味着编写另一个 API 端点并耗费开发时间。
我找到了一个看似简单的解决方案,并正在寻求批评/批评:
为了简单起见,php CLI 将根据是否有作业等待输出 1 或 0:
<?php echo "1" ?>
Bash 脚本可以检查队列中是否有任何作业:
#!/bin/bash
var=$(php -f ../readPhpOutput/testOutput.php)
if [ "$var" -eq "0" ]
then
echo "input zero"
else
echo "input not zero"
fi
sleep 10
另一个 bash 脚本正在使用 nohup 运行,以确保上述脚本正在运行:
#!/bin/bash
while true
do
value=$(ps -A | grep [r]eadPhpOutput)
echo "grep output is: $value"
if [ -z "$value" ]
then /bin/bash ../readPhpOutput/./readPhpOutput.sh &
fi
sleep 5
done
请注意,以上只是简单、朴素的例子,用来说明我想要实现的目标。
我不想编写守护进程的主要原因是缺乏 C 语言经验、担心 fork 轰炸我的生产服务器以及不愿意在同一台服务器上安装编译器。