利用工具生成 dcron 任务

模板问题工具化

线上基于 Yii2 的 PHP 项目 需要跑很多后台进程,用来处理异步任务,如 IM通知、BPM、事件消费。

针对这些后台任务总结分析,发现如下四个特点:

  • 定时执行
  • 拉起异常推出的常驻进程
  • 拉起时异常推出的日志记录到文件
  • 路径固定:部署的代码、日志、缓存、配置等
  • Yii2 Command 程序运行命令格式固定
  • 结束常驻进程运行的程序

基于此提炼出如下 cron 命令模板

1
2
3
ps aux|grep \"php /opt/www/htdocs/{}/yii {}\"|grep -v 'grep' || (php /opt/www/htdocs/{}/yii {} >> /opt/www/logs/{}/{} 2>&1 &

ps aux|grep \"php /opt/www/htdocs/{}/yii {}\"|grep -v 'grep'|awk '{{print $2}}' | xargs -n 1 kill -9

使用 rust 制造如下工具:

  • module_id: 项目名称比如 force-holo
  • yii_cmd: yii2 command 命令名字比如默认自带的 serve/index

因为文件名称中不能有 /,故进行替换 cmd.replace("/", "-")

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use std::env::{args};

fn main() {
if args().len() < 3 {
println!("Usage: {} module_id yii2_cmd", args().nth(0).expect("executable program"));
return;
}
let module_id = args().nth(1).expect("module_id");
let cmd = args().nth(2).expect("command");

// let kill = "ps aux|grep \"php /data0/www/htdocs/{}/yii {}\"|grep -v 'grep' || (php /data0/www/htdocs/{}/yii {} >> /data0/www/applogs/{}/{} 2>&1 &)";

let run_cmd = format!("ps aux|grep \"php /data0/www/htdocs/{}/yii {}\"|grep -v 'grep' || (php /data0/www/htdocs/{}/yii {} >> /data0/www/applogs/{}/{} 2>&1 &)",
module_id, cmd, module_id, cmd, module_id, cmd.replace("/", "-"));

println!("{}", run_cmd);

let kill_cmd = format!("ps aux|grep \"php /data0/www/htdocs/{}/yii {}\"|grep -v 'grep'|awk '{{print $2}}' | xargs -n 1 kill -9",
module_id, cmd);
println!("{}", kill_cmd);

}

1
2
3
4
5
➜  gen-dcron git:(master) cargo build
➜ gen-dcron git:(master) target/debug/gen-dcron force-holo serve/index
ps aux|grep "php /data0/www/htdocs/force-holo/yii serve/index"|grep -v 'grep' || (php /data0/www/htdocs/force-holo/yii serve/index >> /data0/www/applogs/force-holo/serve-index 2>&1 &)
ps aux|grep "php /data0/www/htdocs/force-holo/yii serve/index"|grep -v 'grep'|awk '{print $2}' | xargs -n 1 kill -9

项目地址:https://github.com/noname007/rust-demo-cron-cmd-for-yii2-proj


相关文章: 琐事、工具


利用工具生成 dcron 任务
http://blog.soul11201.com/2020/12/09/template-toolization/
作者
soul11201
发布于
2020年12月9日
许可协议