Coyotes 命令参数安装部署任务推送方式注意事项 介绍
Coyotes 的诞生起源于在使用 Laravel 的定时任务时,由于 PHP
本身的限制(不安装线程相关扩展),无法实现并发的任务执行,如果任务执行时间过长,就会影响到其它定时任务的执行。不同于其它重量级任务队列,Coyotes
仅仅提供了对命令行程序执行的支持,这样就避免了开发者需要学习任务队列相关
API,针对任务队列开发任务程序的需要。只需要提供一个可执行的文件或者脚本执行命令,Coyotes 就可以并发的执行。
命令参数
- channel-default string
默认channel名称,用于消息队列 (default “default”)
- colorful-tty
- concurrent int
并发执行线程数 (default 5)
- host string
redis连接地址,必须指定端口(depressed,使用redis-host) (default “127.0.0.1:6379”)
- http-addr string
HTTP监控服务监听地址+端口 (default “127.0.0.1:60001”)
- password string
redis连接密码(depressed,使用redis-password)
- pidfile string
pid文件路径 (default “/tmp/coyotes.pid”)
- redis-db int
- redis-host string
redis连接地址,必须指定端口 (default “127.0.0.1:6379”)
- redis-password string
- task-mode
是否启用任务模式,默认启用,关闭则不会执行消费 (default true)
安装部署
编译安装需要安装 Go1.7+ ,执行以下命令编译
make build-mac
上述命令编译后是当前平台的可执行文件( ./bin/coyotes
)。比如在Mac系统下完成编译后只能在Mac系统下使用,Linux系统下编译则可以在Linux系统下使用。
如果要在Mac系统下编译Linux系统下使用的可执行文件,需要本地先配置好交叉编译选线,之后执行下面的命令完成Linux版本编译
make build-linux
将生成的执行文件(在 bin 目录)复制到系统的/usr/local/bin目录即可。
mv ./bin/coyotes /usr/local/bin/coyotes
项目目录下提供了supervisor.conf配置文件可以直接在supervisor下使用,使用supervisor管理Coyotes进程。Coyotes在启动之前需要确保Redis服务是可用的。
/usr/local/bin/coyotes -redis-host 127.0.0.1:6379 -password REdis访问密码
如果需要退出进程,需要向进程发送USR2信号,以实现平滑退出。
kill -USR2 $(pgrep coyotes)
请不要直接使用kill -9终止进程,使用它会强制关闭进程,可能会导致正在执行中的命令被终止,造成任务队列数据不完整。
任务推送方式
将待执行的任务推送给 Coyotes 执行有两种方式
-
直接将任务写入到Redis的队列task:prepare:queue
-
使用HTTP API
将任务以json编码的形式写入到Redis的task:prepare:queue即可。
$redis->lpush('task:prepare:queue', json_encode([ 'task' => $taskName, 'chan' => $channel, 'ts' => time(), ], JSON_UnesCAPED_SLASHES | JSON_UnesCAPED_UNICODE))
写入到task:prepare:queue之后,Coyotes会实时的去从中取出任务分发到相应的channel队列供worker消费。
Request:
POST /channels/default HTTP/1.1 Accept: */* Host: localhost:60001 content-type: multipart/form-data; boundary=--------------------------019175029883341751119913 content-length: 179 ----------------------------019175029883341751119913 Content-disposition: form-data; name="task" ping -c 40 baidu.com ----------------------------019175029883341751119913--
Response:
HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Date: Mon, 10 Apr 2017 13:05:56 GMT Content-Length: 92 {"status_code":200,"message":"ok","data":{"task_name":"ping -c 40 baidu.com","result":true}}
注意事项
Coyotes 会使用shell执行任务队列里的任何命令,包括系统相关的命令,如果不严格控制好输入,恶意用户可以非常轻松的拿到系统的root权限。
-
一定不要直接开放给外网, 只在内部信任的网络使用 ,比如绑定http地址到192.168开头的网卡或者127.0.0.1本地网络
-
如果执行的命令包含来自用户的输入,一定要对输入内容进行严格检查,否则会引起命令注入,造成严重的安全问题, 不要相信任何来自用户的输入
-
不要使用 root权限 执行
Coyotes 命令参数安装部署任务推送方式注意事项 官网
https://git.oschina.net/orionis/coyotes
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。