@whyour/qinglong 2.20.2-3 → 2.21.0-10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +5 -0
- package/AGENTS.md +43 -0
- package/README-en.md +11 -0
- package/README.md +11 -0
- package/back/protos/api.proto +3 -0
- package/deploy/kubernetes/README.md +81 -0
- package/deploy/kubernetes/base/kustomization.yaml +5 -0
- package/deploy/kubernetes/base/qinglong.yaml +95 -0
- package/deploy/kubernetes/overlays/example/kustomization.yaml +10 -0
- package/docker/Dockerfile +51 -69
- package/docker/Dockerfile.310 +94 -0
- package/docker/Dockerfile.debian +120 -0
- package/docker/{310.Dockerfile → Dockerfile.debian310} +13 -5
- package/docker/docker-entrypoint.sh +95 -3
- package/docs/PROJECT_ARCHITECTURE.md +550 -0
- package/package.json +29 -28
- package/sample/config.sample.sh +19 -3
- package/sample/notify.js +145 -9
- package/sample/notify.py +110 -11
- package/shell/api.sh +51 -21
- package/shell/bot.sh +30 -16
- package/shell/check.sh +21 -19
- package/shell/lang/en.sh +105 -0
- package/shell/lang/zh.sh +105 -0
- package/shell/otask.sh +117 -28
- package/shell/preload/client.js +20 -2
- package/shell/preload/esm-loader.mjs +41 -0
- package/shell/preload/sitecustomize.js +36 -0
- package/shell/pub.sh +8 -8
- package/shell/rmlog.sh +5 -5
- package/shell/share.sh +50 -31
- package/shell/start.sh +40 -27
- package/shell/task.sh +10 -2
- package/shell/update.sh +22 -22
- package/static/build/api/config.js +17 -7
- package/static/build/api/cron.js +40 -3
- package/static/build/api/dashboard.js +344 -0
- package/static/build/api/env.js +40 -2
- package/static/build/api/index.js +2 -0
- package/static/build/api/log.js +15 -5
- package/static/build/api/script.js +34 -9
- package/static/build/api/system.js +22 -8
- package/static/build/api/user.js +6 -5
- package/static/build/app.js +22 -19
- package/static/build/config/const.js +8 -6
- package/static/build/config/container.js +12 -0
- package/static/build/config/grpcCerts.js +150 -0
- package/static/build/config/index.js +6 -4
- package/static/build/config/util.js +69 -18
- package/static/build/data/cron.js +3 -1
- package/static/build/data/cronStats.js +59 -0
- package/static/build/data/env.js +2 -0
- package/static/build/data/notify.js +18 -1
- package/static/build/data/runningInstance.js +57 -0
- package/static/build/data/sock.js +1 -0
- package/static/build/loaders/app.js +7 -7
- package/static/build/loaders/db.js +8 -2
- package/static/build/loaders/deps.js +1 -22
- package/static/build/loaders/express.js +19 -15
- package/static/build/loaders/initData.js +20 -2
- package/static/build/loaders/initFile.js +3 -1
- package/static/build/loaders/initTask.js +3 -2
- package/static/build/loaders/server.js +1 -1
- package/static/build/protos/api.js +23 -1
- package/static/build/schedule/addCron.js +67 -10
- package/static/build/schedule/api.js +1 -1
- package/static/build/schedule/client.js +9 -1
- package/static/build/schedule/delCron.js +11 -1
- package/static/build/schedule/health.js +1 -1
- package/static/build/services/config.js +19 -5
- package/static/build/services/cron.js +198 -38
- package/static/build/services/dependence.js +19 -18
- package/static/build/services/env.js +31 -3
- package/static/build/services/grpc.js +32 -6
- package/static/build/services/http.js +33 -18
- package/static/build/services/notify.js +87 -8
- package/static/build/services/open.js +2 -1
- package/static/build/services/sshKey.js +6 -3
- package/static/build/services/subscription.js +8 -5
- package/static/build/services/system.js +34 -9
- package/static/build/services/user.js +39 -13
- package/static/build/shared/auth.js +7 -1
- package/static/build/shared/i18n.js +160 -0
- package/static/build/shared/pLimit.js +15 -3
- package/static/build/shared/runCron.js +5 -0
- package/static/build/shared/store.js +7 -0
- package/static/build/validation/schedule.js +10 -0
- package/static/dist/1089.0ecc5383.async.js +1 -0
- package/static/dist/1147.62793604.async.js +1 -0
- package/static/dist/1192.4e5740f2.async.js +1 -0
- package/static/dist/1214.c6469b53.async.js +1 -0
- package/static/dist/134.54df9e38.async.js +1 -0
- package/static/dist/1352.96a77e1d.async.js +1 -0
- package/static/dist/{1765.d8e002d7.async.js → 1765.5ac01a93.async.js} +1 -1
- package/static/dist/1836.f0b74cf1.async.js +1 -0
- package/static/dist/{1885.e0d00d2d.async.js → 1885.e1ea09f6.async.js} +1 -1
- package/static/dist/1967.3f3945d0.async.js +1 -0
- package/static/dist/{2096.383c1047.async.js → 2096.6d98fd12.async.js} +1 -1
- package/static/dist/2208.85285476.async.js +1 -0
- package/static/dist/2286.f371c743.async.js +1 -0
- package/static/dist/2476.4e9b0992.async.js +1 -0
- package/static/dist/2537.2b262ee0.async.js +1 -0
- package/static/dist/{255.12f03ab2.async.js → 255.8a80b983.async.js} +1 -1
- package/static/dist/2635.d4c59d23.async.js +1 -0
- package/static/dist/2808.cdc0995c.async.js +1 -0
- package/static/dist/{2821.be3dc88e.async.js → 2821.651f31e5.async.js} +1 -1
- package/static/dist/2986.4c49eef7.async.js +1 -0
- package/static/dist/300.08ac9875.async.js +1 -0
- package/static/dist/3191.545ab873.async.js +1 -0
- package/static/dist/3714.8d6dba9e.async.js +1 -0
- package/static/dist/3906.a5eee612.async.js +1 -0
- package/static/dist/{6541.a6d499de.async.js → 3948.4fe809fd.async.js} +1 -1
- package/static/dist/{5171.7fc6d0a2.async.js → 4573.16f19278.async.js} +1 -1
- package/static/dist/{4859.93e63ea6.async.js → 4859.6592cebb.async.js} +1 -1
- package/static/dist/4887.8e3ae573.async.js +1 -0
- package/static/dist/{4902.54ecbdb5.async.js → 4902.555f92ab.async.js} +1 -1
- package/static/dist/{4934.1ca6b6b0.async.js → 4934.f3539d08.async.js} +1 -1
- package/static/dist/5077.cbd111cd.async.js +1 -0
- package/static/dist/{6247.b550d996.async.js → 5157.7c5af144.async.js} +1 -1
- package/static/dist/{540.481d4708.async.js → 540.19ddf020.async.js} +1 -1
- package/static/dist/{5970.10ac4f16.async.js → 5970.d3a6e7bd.async.js} +1 -1
- package/static/dist/{6013.2d7bb12a.async.js → 6013.4e38de36.async.js} +1 -1
- package/static/dist/{6016.9c379049.async.js → 6016.1e6574b6.async.js} +1 -1
- package/static/dist/{6035.5889ddc7.async.js → 6035.32ebfad9.async.js} +1 -1
- package/static/dist/6339.ab305e96.async.js +1 -0
- package/static/dist/6569.55177f6a.async.js +1 -0
- package/static/dist/6610.c111af7e.async.js +1 -0
- package/static/dist/{3034.6413c38e.async.js → 6638.87a163d2.async.js} +1 -1
- package/static/dist/{6646.5fc37228.async.js → 6646.95e92533.async.js} +1 -1
- package/static/dist/6665.1d099ad1.async.js +1 -0
- package/static/dist/{7355.b7c0562f.async.js → 7355.f9f263d8.async.js} +1 -1
- package/static/dist/{7384.065ccae2.async.js → 7384.1bb449d5.async.js} +1 -1
- package/static/dist/7441.ee1bf2bb.async.js +1 -0
- package/static/dist/{7508.a31662a3.async.js → 7508.7dcee91c.async.js} +1 -1
- package/static/dist/{7802.6b73f16a.async.js → 7802.34255805.async.js} +1 -1
- package/static/dist/{7984.e6bb9378.async.js → 7984.594296a5.async.js} +1 -1
- package/static/dist/{5653.4fce7ce8.async.js → 8033.5cb31493.async.js} +1 -1
- package/static/dist/8147.2fb55202.async.js +1 -0
- package/static/dist/8187.48c130d6.async.js +1 -0
- package/static/dist/8495.d53e15ca.async.js +1 -0
- package/static/dist/8587.315b06c0.async.js +1 -0
- package/static/dist/8826.db34ad8d.async.js +1 -0
- package/static/dist/{2742.4852aac8.async.js → 8865.ed665d31.async.js} +1 -1
- package/static/dist/901.7ee5c6d3.async.js +1 -0
- package/static/dist/9271.231db2ce.async.js +1 -0
- package/static/dist/9323.a33f47da.async.js +1 -0
- package/static/dist/{9730.30083c91.async.js → 9730.801665a3.async.js} +1 -1
- package/static/dist/{9761.627ca3b5.async.js → 9761.360a19d8.async.js} +1 -1
- package/static/dist/index.html +2 -2
- package/static/dist/layouts__index.a7a2bfe0.async.js +1 -0
- package/static/dist/layouts__index.adf0692f.chunk.css +1 -0
- package/static/dist/preload_helper.3048fe5b.js +1 -0
- package/static/dist/{src__pages__config__index.622b6ee8.async.js → src__pages__config__index.a22ff7dc.async.js} +1 -1
- package/static/dist/{src__pages__crontab__const.323d5124.async.js → src__pages__crontab__const.aba07deb.async.js} +1 -1
- package/static/dist/src__pages__crontab__detail.b98f0084.async.js +1 -0
- package/static/dist/src__pages__crontab__index.68e78a33.async.js +1 -0
- package/static/dist/{src__pages__crontab__logModal.5e6a4bf2.async.js → src__pages__crontab__logModal.831d5e4b.async.js} +1 -1
- package/static/dist/src__pages__crontab__modal.f7041c7c.async.js +1 -0
- package/static/dist/src__pages__crontab__type.d7af36e5.async.js +1 -0
- package/static/dist/{src__pages__crontab__viewCreateModal.ffcf7a24.async.js → src__pages__crontab__viewCreateModal.4d589f66.async.js} +1 -1
- package/static/dist/{src__pages__crontab__viewManageModal.c2724575.async.js → src__pages__crontab__viewManageModal.0e317746.async.js} +1 -1
- package/static/dist/src__pages__dashboard__index.58177357.async.js +1 -0
- package/static/dist/src__pages__dependence__index.b7bbc795.async.js +1 -0
- package/static/dist/{src__pages__dependence__logModal.f123e2ac.async.js → src__pages__dependence__logModal.0681830b.async.js} +1 -1
- package/static/dist/src__pages__dependence__modal.f7bb47ba.async.js +1 -0
- package/static/dist/src__pages__env__editNameModal.48715576.async.js +1 -0
- package/static/dist/src__pages__env__index.452cdc47.async.js +1 -0
- package/static/dist/src__pages__env__modal.e1234834.async.js +1 -0
- package/static/dist/src__pages__error__index.dedb2b90.async.js +1 -0
- package/static/dist/src__pages__initialization__index.22620a77.async.js +1 -0
- package/static/dist/src__pages__log__index.9c66639f.async.js +1 -0
- package/static/dist/{src__pages__login__index.cd6e3152.async.js → src__pages__login__index.8c813eb1.async.js} +1 -1
- package/static/dist/{src__pages__script__components__UnsupportedFilePreview__index.39074c68.async.js → src__pages__script__components__UnsupportedFilePreview__index.c347a13a.async.js} +1 -1
- package/static/dist/src__pages__script__editNameModal.532a3044.async.js +1 -0
- package/static/dist/src__pages__script__index.1fc20f22.async.js +1 -0
- package/static/dist/src__pages__script__renameModal.5cdde919.async.js +1 -0
- package/static/dist/src__pages__script__saveModal.5ffed35f.async.js +1 -0
- package/static/dist/src__pages__script__setting.1a82c6d7.async.js +1 -0
- package/static/dist/src__pages__setting__appModal.43b7758a.async.js +1 -0
- package/static/dist/src__pages__setting__checkUpdate.34d773f2.async.js +1 -0
- package/static/dist/src__pages__setting__dependence.9c04c79a.async.js +1 -0
- package/static/dist/src__pages__setting__index.7e070838.async.js +1 -0
- package/static/dist/src__pages__setting__notification.bac481c2.async.js +1 -0
- package/static/dist/src__pages__setting__other.707cfafe.async.js +1 -0
- package/static/dist/src__pages__setting__security.b7235753.async.js +1 -0
- package/static/dist/src__pages__setting__systemLog.b81a8c1d.async.js +1 -0
- package/static/dist/{src__pages__subscription__logModal.0caa7283.async.js → src__pages__subscription__logModal.3864b37f.async.js} +1 -1
- package/static/dist/src__pages__subscription__modal.562448e2.async.js +1 -0
- package/static/dist/{umi.ef8199a4.js → umi.a54a59f6.js} +1 -1
- package/version.yaml +33 -4
- package/sample/notify.py.save +0 -1010
- package/static/dist/105.85a5c47a.async.js +0 -1
- package/static/dist/1083.f86ce804.async.js +0 -1
- package/static/dist/1147.32f41a88.async.js +0 -1
- package/static/dist/1352.ab6da08e.async.js +0 -1
- package/static/dist/1690.f0290540.async.js +0 -1
- package/static/dist/1742.6cbe5aca.async.js +0 -1
- package/static/dist/2208.8e3a7325.async.js +0 -1
- package/static/dist/3191.70bc19db.async.js +0 -1
- package/static/dist/5312.74b95311.async.js +0 -1
- package/static/dist/5691.931f59c5.async.js +0 -1
- package/static/dist/6159.55cb068a.async.js +0 -1
- package/static/dist/7025.f4080d63.async.js +0 -1
- package/static/dist/739.6be5552a.async.js +0 -1
- package/static/dist/7571.4f6240b1.async.js +0 -1
- package/static/dist/786.59fc381c.async.js +0 -1
- package/static/dist/8317.c44c1ebd.async.js +0 -1
- package/static/dist/8826.0291edfd.async.js +0 -1
- package/static/dist/955.3c9481f7.async.js +0 -1
- package/static/dist/layouts__index.1fce90e0.chunk.css +0 -1
- package/static/dist/layouts__index.8dcf1576.async.js +0 -1
- package/static/dist/preload_helper.116a62f6.js +0 -1
- package/static/dist/src__pages__crontab__detail.b07f0c0a.async.js +0 -1
- package/static/dist/src__pages__crontab__index.2e2e1096.async.js +0 -1
- package/static/dist/src__pages__crontab__modal.4d8c2a22.async.js +0 -1
- package/static/dist/src__pages__crontab__type.db7c1858.async.js +0 -1
- package/static/dist/src__pages__dependence__index.3d87ceac.async.js +0 -1
- package/static/dist/src__pages__dependence__modal.631ffb5b.async.js +0 -1
- package/static/dist/src__pages__env__editNameModal.ff85ef8c.async.js +0 -1
- package/static/dist/src__pages__env__index.a0a2fece.async.js +0 -1
- package/static/dist/src__pages__env__modal.d1004662.async.js +0 -1
- package/static/dist/src__pages__error__index.1bc3c90b.async.js +0 -1
- package/static/dist/src__pages__initialization__index.8b1cbaf9.async.js +0 -1
- package/static/dist/src__pages__log__index.cf00c9af.async.js +0 -1
- package/static/dist/src__pages__script__editNameModal.53424d49.async.js +0 -1
- package/static/dist/src__pages__script__index.e65df827.async.js +0 -1
- package/static/dist/src__pages__script__renameModal.4bbe7fb1.async.js +0 -1
- package/static/dist/src__pages__script__saveModal.cf449f3c.async.js +0 -1
- package/static/dist/src__pages__script__setting.b345d59a.async.js +0 -1
- package/static/dist/src__pages__setting__appModal.03faec89.async.js +0 -1
- package/static/dist/src__pages__setting__checkUpdate.46efe057.async.js +0 -1
- package/static/dist/src__pages__setting__dependence.4495c7b6.async.js +0 -1
- package/static/dist/src__pages__setting__index.6919c399.async.js +0 -1
- package/static/dist/src__pages__setting__notification.d6a3884f.async.js +0 -1
- package/static/dist/src__pages__setting__other.0d931d6f.async.js +0 -1
- package/static/dist/src__pages__setting__security.91cb545f.async.js +0 -1
- package/static/dist/src__pages__setting__systemLog.1d433a48.async.js +0 -1
- package/static/dist/src__pages__subscription__modal.0b84f6cf.async.js +0 -1
package/shell/api.sh
CHANGED
|
@@ -41,7 +41,7 @@ add_cron_api() {
|
|
|
41
41
|
fi
|
|
42
42
|
|
|
43
43
|
local api=$(
|
|
44
|
-
curl -s --noproxy "*" "http://
|
|
44
|
+
curl -s --noproxy "*" "http://localhost:${ql_port}/open/crons?t=$currentTimeStamp" \
|
|
45
45
|
-H "Authorization: Bearer ${__ql_token__}" \
|
|
46
46
|
-H "Content-Type: application/json;charset=UTF-8" \
|
|
47
47
|
--data-raw "{\"name\":\"${name//\"/\\\"}\",\"command\":\"${command//\"/\\\"}\",\"schedule\":\"$schedule\",\"sub_id\":$sub_id}" \
|
|
@@ -50,9 +50,9 @@ add_cron_api() {
|
|
|
50
50
|
code=$(echo "$api" | jq -r .code)
|
|
51
51
|
message=$(echo "$api" | jq -r .message)
|
|
52
52
|
if [[ $code == 200 ]]; then
|
|
53
|
-
|
|
53
|
+
t '%s -> 添加成功' "$name"
|
|
54
54
|
else
|
|
55
|
-
|
|
55
|
+
t '%s -> 添加失败(%s)' "$name" "$message"
|
|
56
56
|
fi
|
|
57
57
|
}
|
|
58
58
|
|
|
@@ -71,7 +71,7 @@ update_cron_api() {
|
|
|
71
71
|
fi
|
|
72
72
|
|
|
73
73
|
local api=$(
|
|
74
|
-
curl -s --noproxy "*" "http://
|
|
74
|
+
curl -s --noproxy "*" "http://localhost:${ql_port}/open/crons?t=$currentTimeStamp" \
|
|
75
75
|
-X 'PUT' \
|
|
76
76
|
-H "Authorization: Bearer ${__ql_token__}" \
|
|
77
77
|
-H "Content-Type: application/json;charset=UTF-8" \
|
|
@@ -81,9 +81,9 @@ update_cron_api() {
|
|
|
81
81
|
code=$(echo "$api" | jq -r .code)
|
|
82
82
|
message=$(echo "$api" | jq -r .message)
|
|
83
83
|
if [[ $code == 200 ]]; then
|
|
84
|
-
|
|
84
|
+
t '%s -> 更新成功' "$name"
|
|
85
85
|
else
|
|
86
|
-
|
|
86
|
+
t '%s -> 更新失败(%s)' "$name" "$message"
|
|
87
87
|
fi
|
|
88
88
|
}
|
|
89
89
|
|
|
@@ -98,7 +98,7 @@ update_cron_command_api() {
|
|
|
98
98
|
fi
|
|
99
99
|
|
|
100
100
|
local api=$(
|
|
101
|
-
curl -s --noproxy "*" "http://
|
|
101
|
+
curl -s --noproxy "*" "http://localhost:${ql_port}/open/crons?t=$currentTimeStamp" \
|
|
102
102
|
-X 'PUT' \
|
|
103
103
|
-H "Authorization: Bearer ${__ql_token__}" \
|
|
104
104
|
-H "Content-Type: application/json;charset=UTF-8" \
|
|
@@ -108,9 +108,9 @@ update_cron_command_api() {
|
|
|
108
108
|
code=$(echo "$api" | jq -r .code)
|
|
109
109
|
message=$(echo "$api" | jq -r .message)
|
|
110
110
|
if [[ $code == 200 ]]; then
|
|
111
|
-
|
|
111
|
+
t '%s -> 更新成功' "$command"
|
|
112
112
|
else
|
|
113
|
-
|
|
113
|
+
t '%s -> 更新失败(%s)' "$command" "$message"
|
|
114
114
|
fi
|
|
115
115
|
}
|
|
116
116
|
|
|
@@ -118,7 +118,7 @@ del_cron_api() {
|
|
|
118
118
|
local ids="$1"
|
|
119
119
|
local currentTimeStamp=$(date +%s)
|
|
120
120
|
local api=$(
|
|
121
|
-
curl -s --noproxy "*" "http://
|
|
121
|
+
curl -s --noproxy "*" "http://localhost:${ql_port}/open/crons?t=$currentTimeStamp" \
|
|
122
122
|
-X 'DELETE' \
|
|
123
123
|
-H "Authorization: Bearer ${__ql_token__}" \
|
|
124
124
|
-H "Content-Type: application/json;charset=UTF-8" \
|
|
@@ -128,9 +128,9 @@ del_cron_api() {
|
|
|
128
128
|
code=$(echo "$api" | jq -r .code)
|
|
129
129
|
message=$(echo "$api" | jq -r .message)
|
|
130
130
|
if [[ $code == 200 ]]; then
|
|
131
|
-
|
|
131
|
+
t '成功'
|
|
132
132
|
else
|
|
133
|
-
|
|
133
|
+
t '失败(%s)' "$message"
|
|
134
134
|
fi
|
|
135
135
|
}
|
|
136
136
|
|
|
@@ -141,13 +141,19 @@ update_cron() {
|
|
|
141
141
|
local logPath="$4"
|
|
142
142
|
local lastExecutingTime="${5:-0}"
|
|
143
143
|
local runningTime="${6:-0}"
|
|
144
|
+
local exitCode="${7:-}"
|
|
144
145
|
local currentTimeStamp=$(date +%s)
|
|
146
|
+
local dataRaw="{\"ids\":[$ids],\"status\":\"$status\",\"pid\":\"$pid\",\"log_path\":\"$logPath\",\"last_execution_time\":$lastExecutingTime,\"last_running_time\":$runningTime"
|
|
147
|
+
if [[ -n $exitCode ]]; then
|
|
148
|
+
dataRaw="${dataRaw},\"exit_code\":$exitCode"
|
|
149
|
+
fi
|
|
150
|
+
dataRaw="${dataRaw}}"
|
|
145
151
|
local api=$(
|
|
146
|
-
curl -s --noproxy "*" "http://
|
|
152
|
+
curl -s --noproxy "*" "http://localhost:${ql_port}/open/crons/status?t=$currentTimeStamp" \
|
|
147
153
|
-X 'PUT' \
|
|
148
154
|
-H "Authorization: Bearer ${__ql_token__}" \
|
|
149
155
|
-H "Content-Type: application/json;charset=UTF-8" \
|
|
150
|
-
--data-raw "
|
|
156
|
+
--data-raw "$dataRaw" \
|
|
151
157
|
--compressed
|
|
152
158
|
)
|
|
153
159
|
code=$(echo "$api" | jq -r .code)
|
|
@@ -165,7 +171,7 @@ notify_api() {
|
|
|
165
171
|
local content="$2"
|
|
166
172
|
local currentTimeStamp=$(date +%s)
|
|
167
173
|
local api=$(
|
|
168
|
-
curl -s --noproxy "*" "http://
|
|
174
|
+
curl -s --noproxy "*" "http://localhost:${ql_port}/open/system/notify?t=$currentTimeStamp" \
|
|
169
175
|
-X 'PUT' \
|
|
170
176
|
-H "Authorization: Bearer ${__ql_token__}" \
|
|
171
177
|
-H "Content-Type: application/json;charset=UTF-8" \
|
|
@@ -175,9 +181,9 @@ notify_api() {
|
|
|
175
181
|
code=$(echo "$api" | jq -r .code)
|
|
176
182
|
message=$(echo "$api" | jq -r .message)
|
|
177
183
|
if [[ $code == 200 ]]; then
|
|
178
|
-
|
|
184
|
+
t '通知发送成功🎉'
|
|
179
185
|
else
|
|
180
|
-
|
|
186
|
+
t '通知失败(%s)' "$message"
|
|
181
187
|
fi
|
|
182
188
|
}
|
|
183
189
|
|
|
@@ -185,7 +191,7 @@ find_cron_api() {
|
|
|
185
191
|
local params="$1"
|
|
186
192
|
local currentTimeStamp=$(date +%s)
|
|
187
193
|
local api=$(
|
|
188
|
-
curl -s --noproxy "*" "http://
|
|
194
|
+
curl -s --noproxy "*" "http://localhost:${ql_port}/open/crons/detail?$params&t=$currentTimeStamp" \
|
|
189
195
|
-H "Authorization: Bearer ${__ql_token__}" \
|
|
190
196
|
-H "Content-Type: application/json;charset=UTF-8" \
|
|
191
197
|
--compressed
|
|
@@ -204,7 +210,7 @@ update_auth_config() {
|
|
|
204
210
|
local tip="$2"
|
|
205
211
|
local currentTimeStamp=$(date +%s)
|
|
206
212
|
local api=$(
|
|
207
|
-
curl -s --noproxy "*" "http://
|
|
213
|
+
curl -s --noproxy "*" "http://localhost:${ql_port}/open/system/auth/reset?t=$currentTimeStamp" \
|
|
208
214
|
-X 'PUT' \
|
|
209
215
|
-H "Authorization: Bearer ${__ql_token__}" \
|
|
210
216
|
-H "Content-Type: application/json;charset=UTF-8" \
|
|
@@ -214,9 +220,33 @@ update_auth_config() {
|
|
|
214
220
|
code=$(echo "$api" | jq -r .code)
|
|
215
221
|
message=$(echo "$api" | jq -r .message)
|
|
216
222
|
if [[ $code == 200 ]]; then
|
|
217
|
-
|
|
223
|
+
t '%s成功🎉' "$tip"
|
|
218
224
|
else
|
|
219
|
-
|
|
225
|
+
t '%s失败(%s)' "$tip" "$message"
|
|
226
|
+
fi
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
record_cron_stat() {
|
|
230
|
+
local ref_id="$1"
|
|
231
|
+
local exit_code="${2:-0}"
|
|
232
|
+
local elapsed="${3:-0}"
|
|
233
|
+
[[ $ref_id ]] && [[ $ref_id -gt 0 ]] 2>/dev/null || return
|
|
234
|
+
|
|
235
|
+
local api=$(
|
|
236
|
+
curl -s --noproxy "*" "http://localhost:${ql_port:-5700}/open/dashboard/record" \
|
|
237
|
+
-X POST \
|
|
238
|
+
-H "Authorization: Bearer ${__ql_token__}" \
|
|
239
|
+
-H "Content-Type: application/json;charset=UTF-8" \
|
|
240
|
+
--data-raw "{\"ref_id\":$ref_id,\"code\":$exit_code,\"elapsed\":$elapsed}" \
|
|
241
|
+
--compressed
|
|
242
|
+
)
|
|
243
|
+
code=$(echo "$api" | jq -r .code)
|
|
244
|
+
message=$(echo "$api" | jq -r .message)
|
|
245
|
+
if [[ $code != 200 ]]; then
|
|
246
|
+
if [[ ! $message ]]; then
|
|
247
|
+
message="$api"
|
|
248
|
+
fi
|
|
249
|
+
echo -e "${message}"
|
|
220
250
|
fi
|
|
221
251
|
}
|
|
222
252
|
|
package/shell/bot.sh
CHANGED
|
@@ -8,19 +8,33 @@ else
|
|
|
8
8
|
repo_path="${dir_repo}/diybot"
|
|
9
9
|
fi
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
os_name
|
|
13
|
-
if [
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
11
|
+
t '\n1、安装bot依赖...\n'
|
|
12
|
+
os_name="${QL_OS_TYPE:-}"
|
|
13
|
+
if [ -z "$os_name" ]; then
|
|
14
|
+
os_name=$(source /etc/os-release && echo "$ID")
|
|
15
|
+
fi
|
|
16
|
+
|
|
17
|
+
# 非 root 用户使用 sudo
|
|
18
|
+
SUDO=""
|
|
19
|
+
if [ "$(id -u)" -ne 0 ]; then
|
|
20
|
+
SUDO="sudo"
|
|
20
21
|
fi
|
|
21
|
-
echo -e "\nbot依赖安装成功...\n"
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
case "$os_name" in
|
|
24
|
+
alpine)
|
|
25
|
+
$SUDO apk --no-cache add -f zlib-dev gcc jpeg-dev python3-dev musl-dev freetype-dev
|
|
26
|
+
;;
|
|
27
|
+
debian|ubuntu)
|
|
28
|
+
$SUDO apt-get install -y gcc python3-dev musl-dev zlib1g-dev libjpeg-dev libfreetype-dev
|
|
29
|
+
;;
|
|
30
|
+
*)
|
|
31
|
+
t '暂不支持此系统 %s' "$os_name"
|
|
32
|
+
exit 1
|
|
33
|
+
;;
|
|
34
|
+
esac
|
|
35
|
+
t '\nbot依赖安装成功...\n'
|
|
36
|
+
|
|
37
|
+
t '2、下载bot所需文件...\n'
|
|
24
38
|
if [[ ! -d ${repo_path}/.git ]]; then
|
|
25
39
|
rm -rf ${repo_path}
|
|
26
40
|
git_clone_scripts ${url} ${repo_path} "main"
|
|
@@ -30,9 +44,9 @@ cp -rf "$repo_path/jbot" $dir_data
|
|
|
30
44
|
if [[ ! -f "$dir_config/bot.json" ]]; then
|
|
31
45
|
cp -f "$repo_path/config/bot.json" "$dir_config"
|
|
32
46
|
fi
|
|
33
|
-
|
|
47
|
+
t '\nbot文件下载成功...\n'
|
|
34
48
|
|
|
35
|
-
|
|
49
|
+
t '3、安装python3依赖...\n'
|
|
36
50
|
cp -f "$repo_path/jbot/requirements.txt" "$dir_data"
|
|
37
51
|
|
|
38
52
|
cd $dir_data
|
|
@@ -42,11 +56,11 @@ cat requirements.txt | while read LREAD; do
|
|
|
42
56
|
fi
|
|
43
57
|
done
|
|
44
58
|
|
|
45
|
-
|
|
59
|
+
t '\npython3依赖安装成功...\n'
|
|
46
60
|
|
|
47
|
-
|
|
61
|
+
t '4、启动bot程序...\n'
|
|
48
62
|
make_dir $dir_log/bot
|
|
49
63
|
cd $dir_data
|
|
50
64
|
ps -eo pid,command | grep "python3 -m jbot" | grep -v grep | awk '{print $1}' | xargs kill -9 2>/dev/null
|
|
51
65
|
nohup python3 -m jbot >$dir_log/bot/nohup.log 2>&1 &
|
|
52
|
-
|
|
66
|
+
t 'bot启动成功...\n'
|
package/shell/check.sh
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
|
|
3
3
|
reset_env() {
|
|
4
|
-
|
|
4
|
+
t '---> 1. 开始检测配置文件\n'
|
|
5
5
|
fix_config
|
|
6
|
-
|
|
6
|
+
t '---> 配置文件检测完成\n'
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
t '---> 2. 开始安装青龙依赖\n'
|
|
9
9
|
npm_install_2 $dir_root
|
|
10
|
-
|
|
10
|
+
t '---> 青龙依赖安装完成\n'
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
t '---> 脚本依赖安装完成\n'
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
copy_dep() {
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
t '---> 1. 复制通知文件\n'
|
|
17
|
+
t '---> 复制一份 %s 为 %s\n' "$file_notify_py_sample" "$file_notify_py"
|
|
18
18
|
cp -fv $file_notify_py_sample $file_notify_py
|
|
19
19
|
echo
|
|
20
|
-
|
|
20
|
+
t '---> 复制一份 %s 为 %s\n' "$file_notify_js_sample" "$file_notify_js"
|
|
21
21
|
cp -fv $file_notify_js_sample $file_notify_js
|
|
22
|
-
|
|
22
|
+
t '---> 通知文件复制完成\n'
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
pm2_log() {
|
|
26
|
-
|
|
26
|
+
t '---> pm2日志'
|
|
27
27
|
local panelOut="/root/.pm2/logs/qinglong-out.log"
|
|
28
28
|
local panelError="/root/.pm2/logs/qinglong-error.log"
|
|
29
29
|
tail -n 300 "$panelOut"
|
|
@@ -31,10 +31,11 @@ pm2_log() {
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
check_ql() {
|
|
34
|
-
local api=$(curl -s --noproxy "*" "http://
|
|
35
|
-
|
|
34
|
+
local api=$(curl -s --noproxy "*" "http://localhost:${ql_port}")
|
|
35
|
+
t '\n=====> 检测面板'
|
|
36
|
+
echo -e "\n\n$api\n"
|
|
36
37
|
if [[ $api =~ "<div id=\"root\"></div>" ]]; then
|
|
37
|
-
|
|
38
|
+
t '=====> 面板服务启动正常\n'
|
|
38
39
|
fi
|
|
39
40
|
}
|
|
40
41
|
|
|
@@ -42,21 +43,22 @@ check_pm2() {
|
|
|
42
43
|
pm2_log
|
|
43
44
|
local currentTimeStamp=$(date +%s)
|
|
44
45
|
local api=$(
|
|
45
|
-
curl -s --noproxy "*" "http://
|
|
46
|
+
curl -s --noproxy "*" "http://localhost:${ql_port}/api/system?t=$currentTimeStamp" \
|
|
46
47
|
-H 'Accept: */*' \
|
|
47
48
|
-H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36' \
|
|
48
|
-
-H "Referer: http://
|
|
49
|
+
-H "Referer: http://localhost:${ql_port}/crontab" \
|
|
49
50
|
-H 'Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7' \
|
|
50
51
|
--compressed
|
|
51
52
|
)
|
|
52
|
-
|
|
53
|
+
t '\n=====> 检测后台'
|
|
54
|
+
echo -e "\n\n$api\n"
|
|
53
55
|
if [[ $api =~ "{\"code\"" ]]; then
|
|
54
|
-
|
|
56
|
+
t '=====> 后台服务启动正常\n'
|
|
55
57
|
fi
|
|
56
58
|
}
|
|
57
59
|
|
|
58
60
|
main() {
|
|
59
|
-
|
|
61
|
+
t '=====> 开始检测'
|
|
60
62
|
npm i -g pnpm@8.3.1 pm2 ts-node
|
|
61
63
|
|
|
62
64
|
reset_env
|
|
@@ -64,7 +66,7 @@ main() {
|
|
|
64
66
|
check_ql
|
|
65
67
|
check_pm2
|
|
66
68
|
reload_pm2
|
|
67
|
-
|
|
69
|
+
t '\n=====> 检测结束\n'
|
|
68
70
|
}
|
|
69
71
|
|
|
70
72
|
main
|
package/shell/lang/en.sh
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# English language pack
|
|
2
|
+
declare -gA LANG_MESSAGES=(
|
|
3
|
+
['任务随机延迟 %s 秒,将于 %s 开始,配置文件参数 RandomDelay 置空可取消延迟\n']='Task delayed %s seconds, will start at %s. Set RandomDelay to empty to cancel delay\n'
|
|
4
|
+
['开始执行...\n']='Starting execution...\n'
|
|
5
|
+
['已停止']='Stopped'
|
|
6
|
+
['完成']='Completed'
|
|
7
|
+
['失败(退出码 %s)']='Failed (exit code %s)'
|
|
8
|
+
['安装 %s 依赖包...\n']='Installing %s dependencies...\n'
|
|
9
|
+
['开始拉取仓库 %s 到 %s\n']='Cloning repository %s to %s\n'
|
|
10
|
+
['添加成功']='Added successfully'
|
|
11
|
+
['添加失败(%s)']='Add failed (%s)'
|
|
12
|
+
['更新成功']='Updated successfully'
|
|
13
|
+
['更新失败(%s)']='Update failed (%s)'
|
|
14
|
+
['成功']='Success'
|
|
15
|
+
['失败(%s)']='Failed (%s)'
|
|
16
|
+
['通知发送成功🎉']='Notification sent successfully 🎉'
|
|
17
|
+
['通知失败(%s)']='Notification failed (%s)'
|
|
18
|
+
['当前有以下脚本可以运行:']='Available scripts:'
|
|
19
|
+
['暂无脚本可以执行']='No scripts available'
|
|
20
|
+
['警告:工作目录不存在 %s']='Warning: working directory does not exist: %s'
|
|
21
|
+
['\n缺少并发运行的环境变量参数']='\nMissing concurrency environment variable'
|
|
22
|
+
['\n缺少单独运行的参数 task xxx.js desi Test']='\nMissing parameter: task xxx.js desi Test'
|
|
23
|
+
['暂不支持此系统 %s']='Unsupported system: %s'
|
|
24
|
+
['检测到 pm2 服务正在运行']='pm2 service is running'
|
|
25
|
+
['npm 模块位置: %s']='npm module location: %s'
|
|
26
|
+
['导入数据成功 %s']='Data imported successfully: %s'
|
|
27
|
+
['导出数据成功 %s']='Data exported successfully: %s'
|
|
28
|
+
['当前版本: %s / 最新版本: %s']='Current: %s / Latest: %s'
|
|
29
|
+
['已是最新版本']='Already up to date'
|
|
30
|
+
['%s 个定时任务正在运行']='%s scheduled tasks running'
|
|
31
|
+
['执行前置命令\n']='Running pre-command\n'
|
|
32
|
+
['\n执行前置命令结束\n']='\nPre-command finished\n'
|
|
33
|
+
['\n执行后置命令\n']='\nRunning post-command\n'
|
|
34
|
+
['\n执行后置命令结束']='\nPost-command finished'
|
|
35
|
+
['警告: PM2 启动失败 (退出码: %s),可能是由于硬件不兼容']='Warning: PM2 start failed (exit code: %s), possibly due to hardware incompatibility'
|
|
36
|
+
['正在尝试直接使用 Node.js 启动服务...']='Attempting to start service with Node.js directly...'
|
|
37
|
+
['已使用 Node.js 直接启动服务 (PID: %s)']='Service started with Node.js directly (PID: %s)'
|
|
38
|
+
['注意: 使用此模式时,部分 PM2 管理功能将不可用']='Note: some PM2 management features are unavailable in this mode'
|
|
39
|
+
['## 开始执行... %s\n']='## Starting... %s\n'
|
|
40
|
+
['\n## 已停止 🛑... %s 耗时 %s 秒%s']='\n## Stopped 🛑... %s took %s seconds%s'
|
|
41
|
+
['\n## 完成 ✅... %s 耗时 %s 秒%s']='\n## Completed ✅... %s took %s seconds%s'
|
|
42
|
+
['\n## 失败 ❌(退出码 %s)... %s 耗时 %s 秒%s']='\n## Failed ❌(exit code %s)... %s took %s seconds%s'
|
|
43
|
+
['%s -> 添加成功']='%s -> Added successfully'
|
|
44
|
+
['%s -> 添加失败(%s)']='%s -> Add failed (%s)'
|
|
45
|
+
['%s -> 更新成功']='%s -> Updated successfully'
|
|
46
|
+
['%s -> 更新失败(%s)']='%s -> Update failed (%s)'
|
|
47
|
+
['%s成功🎉']='%s succeeded 🎉'
|
|
48
|
+
['%s失败(%s)']='%s failed (%s)'
|
|
49
|
+
['检测到有%s的定时任务:']='Found %s scheduled tasks:'
|
|
50
|
+
['\n开始尝试自动删除失效的定时任务...']='\nAttempting to remove invalid scheduled tasks...'
|
|
51
|
+
['\n开始尝试自动添加定时任务...']='\nAttempting to add scheduled tasks...'
|
|
52
|
+
['拉取 %s 成功...\n']='Pull %s succeeded...\n'
|
|
53
|
+
['拉取 %s 失败,请检查日志...\n']='Pull %s failed, check logs...\n'
|
|
54
|
+
['开始下载:%s 保存路径:%s\n']='Downloading: %s to: %s\n'
|
|
55
|
+
['下载 %s 成功...\n']='Download %s succeeded...\n'
|
|
56
|
+
['下载 %s 失败,保留之前正常下载的版本...\n']='Download %s failed, keeping previous version...\n'
|
|
57
|
+
['%s文件不存在,跳过执行...\n']='%s does not exist, skipping...\n'
|
|
58
|
+
['使用 %s 源更新...\n']='Updating using %s mirror...\n'
|
|
59
|
+
['更新青龙源文件成功...\n']='Qinglong source updated successfully\n'
|
|
60
|
+
['更新青龙源文件失败,请检查网络...\n']='Qinglong source update failed, check network\n'
|
|
61
|
+
['更新青龙静态资源成功...\n']='Static assets updated successfully\n'
|
|
62
|
+
['更新青龙静态资源失败,请检查网络...\n']='Static assets update failed, check network\n'
|
|
63
|
+
['\n开始检测依赖...\n']='\nChecking dependencies...\n'
|
|
64
|
+
['\n依赖检测安装成功...\n']='\nDependencies installed successfully\n'
|
|
65
|
+
['更新包下载成功...\n']='Package download succeeded\n'
|
|
66
|
+
['\n依赖检测安装失败,请检查网络...\n']='\nDependency installation failed, check network\n'
|
|
67
|
+
['\n1、安装bot依赖...\n']='\n1. Installing bot dependencies...\n'
|
|
68
|
+
['\nbot依赖安装成功...\n']='\nBot dependencies installed\n'
|
|
69
|
+
['2、下载bot所需文件...\n']='2. Downloading bot files...\n'
|
|
70
|
+
['\nbot文件下载成功...\n']='\nBot files downloaded\n'
|
|
71
|
+
['3、安装python3依赖...\n']='3. Installing python3 dependencies...\n'
|
|
72
|
+
['\npython3依赖安装成功...\n']='\nPython3 dependencies installed\n'
|
|
73
|
+
['4、启动bot程序...\n']='4. Starting bot...\n'
|
|
74
|
+
['bot启动成功...\n']='Bot started successfully\n'
|
|
75
|
+
# check.sh
|
|
76
|
+
['---> 1. 开始检测配置文件\n']='---> 1. Checking config...\n'
|
|
77
|
+
['---> 配置文件检测完成\n']='---> Config check complete\n'
|
|
78
|
+
['---> 2. 开始安装青龙依赖\n']='---> 2. Installing qinglong dependencies...\n'
|
|
79
|
+
['---> 青龙依赖安装完成\n']='---> Dependencies installed\n'
|
|
80
|
+
['---> 脚本依赖安装完成\n']='---> Script dependencies installed\n'
|
|
81
|
+
['---> 1. 复制通知文件\n']='---> 1. Copying notification files...\n'
|
|
82
|
+
['---> 复制一份 %s 为 %s\n']='---> Copying %s to %s\n'
|
|
83
|
+
['---> 通知文件复制完成\n']='---> Notification files copied\n'
|
|
84
|
+
['---> pm2日志']='---> pm2 log'
|
|
85
|
+
['\n=====> 检测面板']='\n=====> Checking panel'
|
|
86
|
+
['=====> 面板服务启动正常\n']='=====> Panel service running normally\n'
|
|
87
|
+
['\n=====> 检测后台']='\n=====> Checking backend'
|
|
88
|
+
['=====> 后台服务启动正常\n']='=====> Backend service running normally\n'
|
|
89
|
+
['=====> 开始检测']='=====> Starting check'
|
|
90
|
+
['\n=====> 检测结束\n']='\n=====> Check complete\n'
|
|
91
|
+
# rmlog.sh
|
|
92
|
+
['查询文件 %s']='Checking file: %s'
|
|
93
|
+
['删除中~']='Deleting...'
|
|
94
|
+
['正在被 %s 使用,跳过~']='In use by %s, skipping...'
|
|
95
|
+
['查找旧日志文件中...\n']='Looking for old log files...\n'
|
|
96
|
+
['删除旧日志执行完毕\n']='Old log cleanup complete\n'
|
|
97
|
+
# start.sh
|
|
98
|
+
['未找到 qinglong 模块,请先执行 npm i -g @whyour/qinglong 安装']='Module not found. Run: npm i -g @whyour/qinglong'
|
|
99
|
+
['请先手动设置 export QL_DIR=%s,环境变量,并手动添加到系统环境变量,然后再次执行命令 qinglong 启动服务']='Set env: export QL_DIR=%s, then run qinglong to start'
|
|
100
|
+
['请先手动设置数据存储目录 export QL_DATA_DIR 环境变量,目录必须以斜杠开头的绝对路径,并且以 /data 结尾,例如 /ql/data 并手动添加到系统环境变量']='Set QL_DATA_DIR (absolute path ending with /data, e.g. /ql/data)'
|
|
101
|
+
['QL_DATA_DIR 必须以 /data 结尾,例如 /ql/data,如果有历史数据,请新建 data 目录,把历史数据放到 data 目录中']='QL_DATA_DIR must end with /data, e.g. /ql/data'
|
|
102
|
+
['暂不支持此系统部署 %s']='Unsupported system for deployment: %s'
|
|
103
|
+
# update.sh
|
|
104
|
+
['命令输入错误...\n']='Invalid command...\n'
|
|
105
|
+
)
|
package/shell/lang/zh.sh
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# 中文语言包(zh key → zh value 恒等,en 包做实际翻译)
|
|
2
|
+
declare -gA LANG_MESSAGES=(
|
|
3
|
+
['任务随机延迟 %s 秒,将于 %s 开始,配置文件参数 RandomDelay 置空可取消延迟\n']='任务随机延迟 %s 秒,将于 %s 开始,配置文件参数 RandomDelay 置空可取消延迟\n'
|
|
4
|
+
['开始执行...\n']='开始执行...\n'
|
|
5
|
+
['已停止']='已停止'
|
|
6
|
+
['完成']='完成'
|
|
7
|
+
['失败(退出码 %s)']='失败(退出码 %s)'
|
|
8
|
+
['安装 %s 依赖包...\n']='安装 %s 依赖包...\n'
|
|
9
|
+
['开始拉取仓库 %s 到 %s\n']='开始拉取仓库 %s 到 %s\n'
|
|
10
|
+
['添加成功']='添加成功'
|
|
11
|
+
['添加失败(%s)']='添加失败(%s)'
|
|
12
|
+
['更新成功']='更新成功'
|
|
13
|
+
['更新失败(%s)']='更新失败(%s)'
|
|
14
|
+
['成功']='成功'
|
|
15
|
+
['失败(%s)']='失败(%s)'
|
|
16
|
+
['通知发送成功🎉']='通知发送成功🎉'
|
|
17
|
+
['通知失败(%s)']='通知失败(%s)'
|
|
18
|
+
['当前有以下脚本可以运行:']='当前有以下脚本可以运行:'
|
|
19
|
+
['暂无脚本可以执行']='暂无脚本可以执行'
|
|
20
|
+
['警告:工作目录不存在 %s']='警告:工作目录不存在 %s'
|
|
21
|
+
['\n缺少并发运行的环境变量参数']='\n缺少并发运行的环境变量参数'
|
|
22
|
+
['\n缺少单独运行的参数 task xxx.js desi Test']='\n缺少单独运行的参数 task xxx.js desi Test'
|
|
23
|
+
['暂不支持此系统 %s']='暂不支持此系统 %s'
|
|
24
|
+
['检测到 pm2 服务正在运行']='检测到 pm2 服务正在运行'
|
|
25
|
+
['npm 模块位置: %s']='npm 模块位置: %s'
|
|
26
|
+
['导入数据成功 %s']='导入数据成功 %s'
|
|
27
|
+
['导出数据成功 %s']='导出数据成功 %s'
|
|
28
|
+
['当前版本: %s / 最新版本: %s']='当前版本: %s / 最新版本: %s'
|
|
29
|
+
['已是最新版本']='已是最新版本'
|
|
30
|
+
['%s 个定时任务正在运行']='%s 个定时任务正在运行'
|
|
31
|
+
['执行前置命令\n']='执行前置命令\n'
|
|
32
|
+
['\n执行前置命令结束\n']='\n执行前置命令结束\n'
|
|
33
|
+
['\n执行后置命令\n']='\n执行后置命令\n'
|
|
34
|
+
['\n执行后置命令结束']='\n执行后置命令结束'
|
|
35
|
+
['警告: PM2 启动失败 (退出码: %s),可能是由于硬件不兼容']='警告: PM2 启动失败 (退出码: %s),可能是由于硬件不兼容'
|
|
36
|
+
['正在尝试直接使用 Node.js 启动服务...']='正在尝试直接使用 Node.js 启动服务...'
|
|
37
|
+
['已使用 Node.js 直接启动服务 (PID: %s)']='已使用 Node.js 直接启动服务 (PID: %s)'
|
|
38
|
+
['注意: 使用此模式时,部分 PM2 管理功能将不可用']='注意: 使用此模式时,部分 PM2 管理功能将不可用'
|
|
39
|
+
['## 开始执行... %s\n']='## 开始执行... %s\n'
|
|
40
|
+
['\n## 已停止 🛑... %s 耗时 %s 秒%s']='\n## 已停止 🛑... %s 耗时 %s 秒%s'
|
|
41
|
+
['\n## 完成 ✅... %s 耗时 %s 秒%s']='\n## 完成 ✅... %s 耗时 %s 秒%s'
|
|
42
|
+
['\n## 失败 ❌(退出码 %s)... %s 耗时 %s 秒%s']='\n## 失败 ❌(退出码 %s)... %s 耗时 %s 秒%s'
|
|
43
|
+
['%s -> 添加成功']='%s -> 添加成功'
|
|
44
|
+
['%s -> 添加失败(%s)']='%s -> 添加失败(%s)'
|
|
45
|
+
['%s -> 更新成功']='%s -> 更新成功'
|
|
46
|
+
['%s -> 更新失败(%s)']='%s -> 更新失败(%s)'
|
|
47
|
+
['%s成功🎉']='%s成功🎉'
|
|
48
|
+
['%s失败(%s)']='%s失败(%s)'
|
|
49
|
+
['检测到有%s的定时任务:']='检测到有%s的定时任务:'
|
|
50
|
+
['\n开始尝试自动删除失效的定时任务...']='\n开始尝试自动删除失效的定时任务...'
|
|
51
|
+
['\n开始尝试自动添加定时任务...']='\n开始尝试自动添加定时任务...'
|
|
52
|
+
['拉取 %s 成功...\n']='拉取 %s 成功...\n'
|
|
53
|
+
['拉取 %s 失败,请检查日志...\n']='拉取 %s 失败,请检查日志...\n'
|
|
54
|
+
['开始下载:%s 保存路径:%s\n']='开始下载:%s 保存路径:%s\n'
|
|
55
|
+
['下载 %s 成功...\n']='下载 %s 成功...\n'
|
|
56
|
+
['下载 %s 失败,保留之前正常下载的版本...\n']='下载 %s 失败,保留之前正常下载的版本...\n'
|
|
57
|
+
['%s文件不存在,跳过执行...\n']='%s文件不存在,跳过执行...\n'
|
|
58
|
+
['使用 %s 源更新...\n']='使用 %s 源更新...\n'
|
|
59
|
+
['更新青龙源文件成功...\n']='更新青龙源文件成功...\n'
|
|
60
|
+
['更新青龙源文件失败,请检查网络...\n']='更新青龙源文件失败,请检查网络...\n'
|
|
61
|
+
['更新青龙静态资源成功...\n']='更新青龙静态资源成功...\n'
|
|
62
|
+
['更新青龙静态资源失败,请检查网络...\n']='更新青龙静态资源失败,请检查网络...\n'
|
|
63
|
+
['\n开始检测依赖...\n']='\n开始检测依赖...\n'
|
|
64
|
+
['\n依赖检测安装成功...\n']='\n依赖检测安装成功...\n'
|
|
65
|
+
['更新包下载成功...\n']='更新包下载成功...\n'
|
|
66
|
+
['\n依赖检测安装失败,请检查网络...\n']='\n依赖检测安装失败,请检查网络...\n'
|
|
67
|
+
['\n1、安装bot依赖...\n']='\n1、安装bot依赖...\n'
|
|
68
|
+
['\nbot依赖安装成功...\n']='\nbot依赖安装成功...\n'
|
|
69
|
+
['2、下载bot所需文件...\n']='2、下载bot所需文件...\n'
|
|
70
|
+
['\nbot文件下载成功...\n']='\nbot文件下载成功...\n'
|
|
71
|
+
['3、安装python3依赖...\n']='3、安装python3依赖...\n'
|
|
72
|
+
['\npython3依赖安装成功...\n']='\npython3依赖安装成功...\n'
|
|
73
|
+
['4、启动bot程序...\n']='4、启动bot程序...\n'
|
|
74
|
+
['bot启动成功...\n']='bot启动成功...\n'
|
|
75
|
+
# check.sh
|
|
76
|
+
['---> 1. 开始检测配置文件\n']='---> 1. 开始检测配置文件\n'
|
|
77
|
+
['---> 配置文件检测完成\n']='---> 配置文件检测完成\n'
|
|
78
|
+
['---> 2. 开始安装青龙依赖\n']='---> 2. 开始安装青龙依赖\n'
|
|
79
|
+
['---> 青龙依赖安装完成\n']='---> 青龙依赖安装完成\n'
|
|
80
|
+
['---> 脚本依赖安装完成\n']='---> 脚本依赖安装完成\n'
|
|
81
|
+
['---> 1. 复制通知文件\n']='---> 1. 复制通知文件\n'
|
|
82
|
+
['---> 复制一份 %s 为 %s\n']='---> 复制一份 %s 为 %s\n'
|
|
83
|
+
['---> 通知文件复制完成\n']='---> 通知文件复制完成\n'
|
|
84
|
+
['---> pm2日志']='---> pm2日志'
|
|
85
|
+
['\n=====> 检测面板']='\n=====> 检测面板'
|
|
86
|
+
['=====> 面板服务启动正常\n']='=====> 面板服务启动正常\n'
|
|
87
|
+
['\n=====> 检测后台']='\n=====> 检测后台'
|
|
88
|
+
['=====> 后台服务启动正常\n']='=====> 后台服务启动正常\n'
|
|
89
|
+
['=====> 开始检测']='=====> 开始检测'
|
|
90
|
+
['\n=====> 检测结束\n']='\n=====> 检测结束\n'
|
|
91
|
+
# rmlog.sh
|
|
92
|
+
['查询文件 %s']='查询文件 %s'
|
|
93
|
+
['删除中~']='删除中~'
|
|
94
|
+
['正在被 %s 使用,跳过~']='正在被 %s 使用,跳过~'
|
|
95
|
+
['查找旧日志文件中...\n']='查找旧日志文件中...\n'
|
|
96
|
+
['删除旧日志执行完毕\n']='删除旧日志执行完毕\n'
|
|
97
|
+
# start.sh
|
|
98
|
+
['未找到 qinglong 模块,请先执行 npm i -g @whyour/qinglong 安装']='未找到 qinglong 模块,请先执行 npm i -g @whyour/qinglong 安装'
|
|
99
|
+
['请先手动设置 export QL_DIR=%s,环境变量,并手动添加到系统环境变量,然后再次执行命令 qinglong 启动服务']='请先手动设置 export QL_DIR=%s,环境变量,并手动添加到系统环境变量,然后再次执行命令 qinglong 启动服务'
|
|
100
|
+
['请先手动设置数据存储目录 export QL_DATA_DIR 环境变量,目录必须以斜杠开头的绝对路径,并且以 /data 结尾,例如 /ql/data 并手动添加到系统环境变量']='请先手动设置数据存储目录 export QL_DATA_DIR 环境变量,目录必须以斜杠开头的绝对路径,并且以 /data 结尾,例如 /ql/data 并手动添加到系统环境变量'
|
|
101
|
+
['QL_DATA_DIR 必须以 /data 结尾,例如 /ql/data,如果有历史数据,请新建 data 目录,把历史数据放到 data 目录中']='QL_DATA_DIR 必须以 /data 结尾,例如 /ql/data,如果有历史数据,请新建 data 目录,把历史数据放到 data 目录中'
|
|
102
|
+
['暂不支持此系统部署 %s']='暂不支持此系统部署 %s'
|
|
103
|
+
# update.sh
|
|
104
|
+
['命令输入错误...\n']='命令输入错误...\n'
|
|
105
|
+
)
|