通过PHP CLI实现简单的数据库实时监控调度

要实现的功能:监控user表,若有新纪录增加,将其向user2表中添加。(实际应用上可以引深一些,例如对数据进行相关处理等) 下面是PHP代码(dbtest.PHP
<div class="codetitle"><a style="CURSOR: pointer" data="60551" class="copybut" id="copybut60551" onclick="doCopy('code60551')"> 代码如下:

<div class="codebody" id="code60551">
!#/usr/local/PHP/bin/PHP
<?PHP
MysqL_connect('localhost','username','password');
MysqL_select_db("test");
echo 'PID: '.posix_getpid().' '; //当前进程PID(linux下)
$old_id = 0;
while (1)
{
$sql = "SELECT id FROM user ORDER BY id DESC LIMIT 1";
$result = MysqL_query($sql);
$item = MysqL_fetch_assoc($result);
$new_id = $item['id'];
$values_arr = array();
for ($i=$new_id; $i>$old_id && $old_id!=0; $i--)
{
$sql = "SELECT name,age FROM user WHERE id='{$i}' LIMIT 1";
$result = MysqL_query($sql);
$item = MysqL_fetch_assoc($result);
$name = $item['name'];
$age = $item['age'];
$values_arr[] = "('{$name}','{$age}')";
}
if (!emptyempty($values_arr))
{
$values_str = implode(',',$values_arr);
$sql = "INSERT INTO user2(name,age) VALUES {$values_str}";
MysqL_query($sql);
}
$old_id = max($old_id,$new_id);
sleep(3); //3秒后进入下次循环
}

业务流程应该没什么说的,就有几处需要注意的地方:
第一行是PHP CLI模式需要添加的命令路径,还有就是那个while(1)和sleep(3),其余都是普通的PHP代码写法。
通过shell命令PHP dbtest.PHP运行即可,我在虚拟机上测试,正常情况下占用率cpu 0%,内存1%。
实际应用中可以放到后台运行:
PHP dbtest.PHP &
bg 1
PS:&命令很多地方说的很不清楚,甚至错误。它只是将程序放入后台,而并没有实际运行!
顺带总结复习一下linux的前后台运行相关命令

命令 前后台 状态 使用方式

后台 暂停 加在命令后

bg 后台 运行 后跟作业号

fg 前台 运行 后跟作业号

Ctrl+Z 后台 暂停 (组合键)

jobs (查看所有作业号) 命令

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...