支持非js任务随机延迟 (#1580)

* 修复非JS任务不能随机延迟的问题
This commit is contained in:
景大侠 2022-08-26 17:11:16 +08:00 committed by GitHub
parent 32eec68278
commit d2590edab3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 38 additions and 11 deletions

View File

@ -298,7 +298,11 @@ export default class CronService {
if (!cmdStr.includes('task ') && !cmdStr.includes('ql ')) { if (!cmdStr.includes('task ') && !cmdStr.includes('ql ')) {
cmdStr = `task ${cmdStr}`; cmdStr = `task ${cmdStr}`;
} }
if (cmdStr.endsWith('.js')) { if (cmdStr.endsWith('.js')
|| cmdStr.endsWith('.py')
|| cmdStr.endsWith('.pyc')
|| cmdStr.endsWith('.sh')
|| cmdStr.endsWith('.ts')) {
cmdStr = `${cmdStr} now`; cmdStr = `${cmdStr} now`;
} }

View File

@ -29,6 +29,14 @@ MaxConcurrentNum="5"
## 默认给javascript任务加随机延迟如 RandomDelay="300" ,表示任务将在 1-300 秒内随机延迟一个秒数,然后再运行,取消延迟赋值为空 ## 默认给javascript任务加随机延迟如 RandomDelay="300" ,表示任务将在 1-300 秒内随机延迟一个秒数,然后再运行,取消延迟赋值为空
RandomDelay="300" RandomDelay="300"
## 需要随机延迟运行任务的文件后缀,直接写后缀名即可,多个后缀用空格分开,例如: js py ts
## 默认仅给javascript任务加随机延迟其它任务按定时规则准点运行。全部任务随机延迟赋值为空
RandomDelayFileExtensions="js"
## 每小时的第几分钟准点运行任务,当在这些时间运行任务时将忽略 RandomDelay 配置,不会被随机延迟
## 默认是第0分钟和第30分钟例如21:00或21:30分的任务将会准点运行。不需要准点运行赋值为空
RandomDelayIgnoredMinutes="0 30"
## 如果你自己会写shell脚本并且希望在每次运行 ql update 命令时,额外运行你的 shell 脚本,请赋值为 "true"默认为true ## 如果你自己会写shell脚本并且希望在每次运行 ql update 命令时,额外运行你的 shell 脚本,请赋值为 "true"默认为true
EnableExtraShell="true" EnableExtraShell="true"

View File

@ -24,12 +24,29 @@ define_program() {
random_delay() { random_delay() {
local random_delay_max=$RandomDelay local random_delay_max=$RandomDelay
if [[ $random_delay_max ]] && [[ $random_delay_max -gt 0 ]]; then if [[ $random_delay_max ]] && [[ $random_delay_max -gt 0 ]]; then
local current_min=$(date "+%-M") local file_param=$1
if [[ $current_min -ne 0 ]] && [[ $current_min -ne 30 ]]; then local file_extensions=${RandomDelayFileExtensions-"js"}
delay_second=$(($(gen_random_num $random_delay_max) + 1)) local ignored_minutes=${RandomDelayIgnoredMinutes-"0 30"}
echo -e "\n命令未添加 \"now\",随机延迟 $delay_second 秒后再执行任务,如需立即终止,请按 CTRL+C...\n"
sleep $delay_second if [[ -n $file_extensions ]]; then
if ! echo "$file_param" | grep -qE "\.${file_extensions// /$|\\.}$"; then
# echo -e "\n当前文件需要准点运行, 放弃随机延迟\n"
return
fi
fi fi
local current_min
current_min=$(date "+%-M")
for minute in $ignored_minutes; do
if [[ $current_min -eq $minute ]]; then
# echo -e "\n当前时间需要准点运行, 放弃随机延迟\n"
return
fi
done
local delay_second=$(($(gen_random_num "$random_delay_max") + 1))
echo -e "\n命令未添加 \"now\",随机延迟 $delay_second 秒后再执行任务,如需立即终止,请按 CTRL+C...\n"
sleep $delay_second
fi fi
} }
@ -78,10 +95,8 @@ run_nohup() {
run_normal() { run_normal() {
local file_param=$1 local file_param=$1
define_program "$file_param" define_program "$file_param"
if [[ $file_param == *.js ]]; then if [[ $# -eq 1 ]]; then
if [[ $# -eq 1 ]]; then random_delay "$file_param"
random_delay
fi
fi fi
local time=$(date "+$time_format") local time=$(date "+$time_format")
@ -356,7 +371,7 @@ main() {
fi fi
time_format="%Y-%m-%d %H:%M:%S" time_format="%Y-%m-%d %H:%M:%S"
if [[ $1 == *.js ]] || [[ $1 == *.py ]] || [[ $1 == *.sh ]] || [[ $1 == *.ts ]]; then if [[ $1 == *.js ]] || [[ $1 == *.py ]] || [[ $1 == *.pyc ]] || [[ $1 == *.sh ]] || [[ $1 == *.ts ]]; then
case $# in case $# in
1) 1)
run_normal "$1" run_normal "$1"