Crates.io | rjob |
lib.rs | rjob |
version | 0.1.2 |
source | src |
created_at | 2023-05-27 04:46:06.800418 |
updated_at | 2023-05-29 15:49:30.245782 |
description | A Simple Job Scheduler By Rust. |
homepage | https://docs.rs/rjob |
repository | https://github.com/hi-liyan/rjob |
max_upload_size | |
id | 875783 |
size | 78,877 |
rjob 是一个简单的定时任务调度程序,它支持执行 HTTP 请求任务。你可以使用它来根据指定的计划定期发送 HTTP 请求,执行各种后台任务。
在可执行程序所在的目录中添加任务定义文件。任务定义文件可以是 JSON 或 YAML 格式。请确保在该目录中只有一个任务定义文件存在。
jobs.json:
{
"timezone": "Asia/Tokyo",
"http_jobs": [
{
"enable": true,
"name": "users2",
"cron": "*/5 * * * * ?",
"timeout": 3000,
"max_retry": 5,
"request": {
"url": "https://reqres.in/api/users/2",
"method": "GET"
}
},
{
"enable": false,
"name": "login",
"cron": "*/10 * * * * ?",
"request": {
"url": "https://reqres.in/api/login",
"method": "POST",
"body": {
"email": "eve.holt@reqres.in",
"password": "cityslicka"
}
}
}
]
}
jobs.yaml:
http_jobs:
- enable: true
name: users2
cron: '*/5 * * * * ?'
request:
url: https://reqres.in/api/users/2
method: GET
- enable: true
name: login
cron: '*/10 * * * * ?'
request:
url: https://reqres.in/api/login
method: POST
body:
email: eve.holt@reqres.in
password: cityslicka
该配置文件用于定义基于指定计划的定时执行的 HTTP 请求任务。配置文件包含以下部分:
enable:指定任务是否启用。如果未指定,则默认为 true。
name:(必须)指定任务名称。该名称将用于在日志中标识任务。
cron:(必须)指定任务执行的计划。值应为有效的 cron 表达式。cron 表达式的格式为:秒 分 时 日 月 周 年
。例如:0 0 12 * * ?
表示每天中午 12 点执行任务。
timeout:指定任务执行的超时时间,单位为:毫秒。如果未指定,则默认值为 5000。
max_retry:指定当HTTP请求失败时的最大重试次数。如果未指定,则默认值为 3。
request:(必须)指定 HTTP 请求的相关属性:
{"Content-Type": "application/json"}
。如果是 YAML 格式的配置文件,则应使用以下格式:headers:
Content-Type: application/json
{"name": "rjob", "version": "1.0.0"}
。如果是 YAML 格式的配置文件,则应使用以下格式:body:
name: rjob
version: 1.0.0
./rjob
# 在后台运行程序,程序日志会被输出到nohup.out文件中
nohup ./rjob &
# 查看进程
ps -aux | grep rjob
# 结束进程
kill -9 进程号PID
任务执行时会打印日志,可以通过每条日志开头的UUID跟踪任务执行情况。日志输出示例如下:
4cd4a467890646c9ac96cc15d3ad3ab9 2023-05-27 12:01:20.003 Http job start, job name: login
4cd4a467890646c9ac96cc15d3ad3ab9 2023-05-27 12:01:20.003 Job: [name: login, enable: true, cron: */10 * * * * ?, request: [url: https://reqres.in/api/login, method: POST, headers: None, body: {"email":"eve.holt@reqres.in","password":"cityslicka"}]]
5f00ef4403324c2692caddb51315f6ee 2023-05-27 12:01:20.003 Http job start, job name: users2
5f00ef4403324c2692caddb51315f6ee 2023-05-27 12:01:20.003 Job: [name: users2, enable: true, cron: */5 * * * * ?, request: [url: https://reqres.in/api/users/2, method: GET, headers: None, body: None]]
5f00ef4403324c2692caddb51315f6ee 2023-05-27 12:01:20.003 Http request success, job name: users2
5f00ef4403324c2692caddb51315f6ee 2023-05-27 12:01:20.003 Http response: {"data":{"id":2,"email":"janet.weaver@reqres.in","first_name":"Janet","last_name":"Weaver","avatar":"https://reqres.in/img/faces/2-image.jpg"},"support":{"url":"https://reqres.in/#support-heading","text":"To keep ReqRes free, contributions towards server costs are appreciated!"}}
5f00ef4403324c2692caddb51315f6ee 2023-05-27 12:01:20.003 Http job end, job name: users2
4cd4a467890646c9ac96cc15d3ad3ab9 2023-05-27 12:01:20.003 Http request success, job name: login
4cd4a467890646c9ac96cc15d3ad3ab9 2023-05-27 12:01:20.003 Http response: {"token":"QpwL5tke4Pnpja7X4"}
4cd4a467890646c9ac96cc15d3ad3ab9 2023-05-27 12:01:20.003 Http job end, job name: login
在项目中添加.cargo
目录,添加config.toml
文件,内容如下:
[target.x86_64-unknown-linux-musl]
linker = "x86_64-linux-musl-gcc"
添加编译目标x86_64-unknown-linux-musl
。
rustup target add x86_64-unknown-linux-musl
查看编译目标列表
rustup target list
编译
cargo build --release --target=x86_64-unknown-linux-musl
在项目中添加.cargo
目录,添加config.toml
文件,内容如下:
[target.aarch64-unknown-linux-musl]
linker = "aarch64-linux-musl-ld"
添加编译目标aarch64-unknown-linux-musl
。
rustup target add aarch64-unknown-linux-musl
查看编译目标列表
rustup target list
编译
cargo build --release --target=aarch64-unknown-linux-musl
musl-cross
。
brew install filosottile/musl-cross/musl-cross
build-essential
。
sudo apt install build-essential
error: failed to run custom build command for 'ring v0.16.20'
错误时,安装 musl-tools
。
sudo apt install musl-tools