我们的生产服务器遇到了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的经验不足,担心会用叉子轰炸我的生产服务器以及不愿在同一服务器上安装编译器。
1
您的第二个脚本基本上可以彻底改造服务管理器。现有的软件,例如systemd,supervisor,monit可以做同样的事情。
—
grawity
谢谢-这正是我所寻求的信息。很明显,我超出了我的舒适范围:)
—
pcgben
请注意,您无需在服务器上安装编译器。您可以在另一台计算机上编译程序,并且仅将二进制可执行文件复制到服务器。
—
janos