aaden-cli 1.6.113 → 1.6.115
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/dist/index.js
CHANGED
|
@@ -19179,7 +19179,7 @@ module.exports = JSON.parse('{"name":"axios","version":"0.19.2","description":"P
|
|
|
19179
19179
|
/***/ ((module) => {
|
|
19180
19180
|
|
|
19181
19181
|
"use strict";
|
|
19182
|
-
module.exports = {"i8":"1.6.
|
|
19182
|
+
module.exports = {"i8":"1.6.115"};
|
|
19183
19183
|
|
|
19184
19184
|
/***/ })
|
|
19185
19185
|
|
|
@@ -28,14 +28,31 @@ if [ -n "$LINE" ]; then
|
|
|
28
28
|
/*) [ -x "$CMD" ] && { echo "do-log 指向 $CMD,存在,不动"; exit 0; } ;;
|
|
29
29
|
*) [ -x "/usr/bin/$CMD" ] || [ -x "/bin/$CMD" ] && { echo "do-log 用 $CMD,cron 的 PATH 里找得到,不动"; exit 0; } ;;
|
|
30
30
|
esac
|
|
31
|
-
|
|
31
|
+
# 经环境变量传给 awk:-v 会把行里的反斜杠当转义处理,匹配不上
|
|
32
|
+
NEW=$(printf '%s\n' "$CUR" | LINE="$LINE" WANT="$WANT" awk '$0 == ENVIRON["LINE"] { print ENVIRON["WANT"]; next } { print }')
|
|
32
33
|
WHAT="do-log 那一行指向的命令不存在,已改成标准写法。原来是:$LINE"
|
|
33
34
|
else
|
|
34
35
|
NEW=$(printf '%s\n%s\n' "$CUR" "$WANT")
|
|
35
36
|
WHAT="aaden 的 crontab 里没有 do-log,已补上"
|
|
36
37
|
fi
|
|
37
38
|
|
|
38
|
-
|
|
39
|
+
# 新内容先写临时文件再 crontab <文件>:不能 printf | sudoS crontab -,sudoS 自己用 echo 密码 | sudo -S 占了 stdin,
|
|
40
|
+
# 要密码的设备上 crontab 读到的是空 → 整份 crontab 被清空(免密的设备上读到密码那一行、格式不对拒收)。
|
|
41
|
+
# 写之前备份;写完读回来行数少了或没有 do-log 就还原。
|
|
42
|
+
TMP=$(mktemp) && BAK=$(mktemp) || { echo "建临时文件失败"; exit 1; }
|
|
43
|
+
printf '%s\n' "$CUR" > "$BAK"
|
|
44
|
+
printf '%s\n' "$NEW" > "$TMP"
|
|
45
|
+
chmod 644 "$TMP" "$BAK"
|
|
46
|
+
sudoS cp "$BAK" "/etc/aaden/config/crontab-aaden.bak.$(date +%Y%m%d%H%M%S)" 2>/dev/null
|
|
47
|
+
sudoS crontab -u aaden "$TMP" || { echo "写 crontab 失败"; rm -f "$TMP" "$BAK"; exit 1; }
|
|
48
|
+
AFTER=$(sudoS crontab -l -u aaden 2>/dev/null)
|
|
49
|
+
if ! printf '%s\n' "$AFTER" | grep -qxF "$WANT" || [ "$(printf '%s\n' "$AFTER" | grep -c .)" -lt "$(printf '%s\n' "$CUR" | grep -c .)" ]; then
|
|
50
|
+
echo "改完读回来不对,还原原来的 crontab"
|
|
51
|
+
sudoS crontab -u aaden "$BAK"
|
|
52
|
+
rm -f "$TMP" "$BAK"
|
|
53
|
+
exit 1
|
|
54
|
+
fi
|
|
55
|
+
rm -f "$TMP" "$BAK"
|
|
39
56
|
echo "$WHAT"
|
|
40
57
|
DEVICE_ID=$(grep -e DeviceId /var/www/html/Resource/config/config.ini 2>/dev/null | cut -d = -f 2 | tr -d '" \r')
|
|
41
58
|
[ -n "$DEVICE_ID" ] && python3 -c 'import json, sys, urllib.request; urllib.request.urlopen(urllib.request.Request("https://cloud-v2.aaden.io/deviceLog/createEvent", json.dumps({"deviceId": sys.argv[1], "content": sys.argv[2] + " result:0", "type": "系统生成", "operator": "patch ensureDoLogCron"}).encode(), {"Content-Type": "application/json"}), timeout=10)' "$DEVICE_ID" "$WHAT" 2>/dev/null
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# 一次性修复:aaden 的 crontab 里 do-log 不是每 5 分钟跑的,改成 */5。
|
|
3
|
+
# 起因:10-08 用诊断命令查 1541,发现它的 do-log 写成了 "59 4 * * *"——每天只在 04:59 上报一次,
|
|
4
|
+
# 云端看它一直「失联」,也领不到云端命令(命令和自动补跑都挂在 do-log 上)。
|
|
5
|
+
# 202610072130ensureDoLogCron.sh 只查了 do-log 那一行在不在、命令存不存在,没查频率,所以要再跑一遍。
|
|
6
|
+
# 只改那一行(@reboot 那行不动),其它行原样保留;改了就把原来那行报给云端。
|
|
7
|
+
sudoS() { echo "Innerken322." | sudo -S -p '' "$@"; }
|
|
8
|
+
CLI=/usr/local/bin/aaden-cli
|
|
9
|
+
WANT="*/5 * * * * $CLI do-log"
|
|
10
|
+
|
|
11
|
+
[ -x "$CLI" ] || { echo "没有 $CLI,跳过"; exit 0; }
|
|
12
|
+
# do-log 在 root 的 crontab 或 /etc/cron.d 里的老设备:不往 aaden 这边加,免得每 5 分钟报两次
|
|
13
|
+
if sudoS crontab -l -u root 2>/dev/null | grep -v '^[[:space:]]*#' | grep -q 'do-log' \
|
|
14
|
+
|| grep -rqs --exclude='*.dpkg-*' 'aaden-cli do-log' /etc/cron.d 2>/dev/null; then
|
|
15
|
+
echo "do-log 在 root 的 crontab 或 /etc/cron.d 里,不动 aaden 的"; exit 0
|
|
16
|
+
fi
|
|
17
|
+
CUR=$(sudoS crontab -l -u aaden 2>/dev/null) || { echo "aaden 没有 crontab,跳过(整套定时任务缺失要 aaden-cli fix-cronjob)"; exit 0; }
|
|
18
|
+
|
|
19
|
+
# 定时的那一行(不算 @reboot)
|
|
20
|
+
LINE=$(printf '%s\n' "$CUR" | grep -v '^[[:space:]]*#' | grep -v '^[[:space:]]*@' | grep -m1 'do-log')
|
|
21
|
+
if [ -n "$LINE" ]; then
|
|
22
|
+
SCHED=$(printf '%s' "$LINE" | awk '{print $1, $2, $3, $4, $5}')
|
|
23
|
+
CMD=$(printf '%s' "$LINE" | awk '{print $6}')
|
|
24
|
+
OK_CMD=0
|
|
25
|
+
case "$CMD" in
|
|
26
|
+
/*) [ -x "$CMD" ] && OK_CMD=1 ;;
|
|
27
|
+
*) { [ -x "/usr/bin/$CMD" ] || [ -x "/bin/$CMD" ]; } && OK_CMD=1 ;;
|
|
28
|
+
esac
|
|
29
|
+
if [ "$SCHED" = "*/5 * * * *" ] && [ "$OK_CMD" = 1 ]; then
|
|
30
|
+
echo "do-log 每 5 分钟、命令存在,不动"; exit 0
|
|
31
|
+
fi
|
|
32
|
+
# 经环境变量传给 awk:-v 会把行里的反斜杠当转义处理,匹配不上
|
|
33
|
+
NEW=$(printf '%s\n' "$CUR" | LINE="$LINE" WANT="$WANT" awk '$0 == ENVIRON["LINE"] { print ENVIRON["WANT"]; next } { print }')
|
|
34
|
+
WHAT="do-log 定时任务不对,已改成每 5 分钟。原来是:$LINE"
|
|
35
|
+
else
|
|
36
|
+
NEW=$(printf '%s\n%s\n' "$CUR" "$WANT")
|
|
37
|
+
WHAT="aaden 的 crontab 里没有定时的 do-log,已补上每 5 分钟一次"
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
# 新内容先写临时文件再 crontab <文件>:不能 printf | sudoS crontab -,sudoS 自己用 echo 密码 | sudo -S 占了 stdin,
|
|
41
|
+
# 要密码的设备上 crontab 读到的是空 → 整份 crontab 被清空(免密的设备上读到密码那一行、格式不对拒收)。
|
|
42
|
+
# 写之前备份;写完读回来行数少了或没有 do-log 就还原。
|
|
43
|
+
TMP=$(mktemp) && BAK=$(mktemp) || { echo "建临时文件失败"; exit 1; }
|
|
44
|
+
printf '%s\n' "$CUR" > "$BAK"
|
|
45
|
+
printf '%s\n' "$NEW" > "$TMP"
|
|
46
|
+
chmod 644 "$TMP" "$BAK"
|
|
47
|
+
sudoS cp "$BAK" "/etc/aaden/config/crontab-aaden.bak.$(date +%Y%m%d%H%M%S)" 2>/dev/null
|
|
48
|
+
sudoS crontab -u aaden "$TMP" || { echo "写 crontab 失败"; rm -f "$TMP" "$BAK"; exit 1; }
|
|
49
|
+
AFTER=$(sudoS crontab -l -u aaden 2>/dev/null)
|
|
50
|
+
if ! printf '%s\n' "$AFTER" | grep -qxF "$WANT" || [ "$(printf '%s\n' "$AFTER" | grep -c .)" -lt "$(printf '%s\n' "$CUR" | grep -c .)" ]; then
|
|
51
|
+
echo "改完读回来不对,还原原来的 crontab"
|
|
52
|
+
sudoS crontab -u aaden "$BAK"
|
|
53
|
+
rm -f "$TMP" "$BAK"
|
|
54
|
+
exit 1
|
|
55
|
+
fi
|
|
56
|
+
rm -f "$TMP" "$BAK"
|
|
57
|
+
echo "$WHAT"
|
|
58
|
+
DEVICE_ID=$(grep -e DeviceId /var/www/html/Resource/config/config.ini 2>/dev/null | cut -d = -f 2 | tr -d '" \r')
|
|
59
|
+
[ -n "$DEVICE_ID" ] && python3 -c 'import json, sys, urllib.request; urllib.request.urlopen(urllib.request.Request("https://cloud-v2.aaden.io/deviceLog/createEvent", json.dumps({"deviceId": sys.argv[1], "content": sys.argv[2] + " result:0", "type": "系统生成", "operator": "patch fixDoLogSchedule"}).encode(), {"Content-Type": "application/json"}), timeout=10)' "$DEVICE_ID" "$WHAT" 2>/dev/null
|
|
60
|
+
exit 0
|
package/package.json
CHANGED
|
@@ -28,14 +28,31 @@ if [ -n "$LINE" ]; then
|
|
|
28
28
|
/*) [ -x "$CMD" ] && { echo "do-log 指向 $CMD,存在,不动"; exit 0; } ;;
|
|
29
29
|
*) [ -x "/usr/bin/$CMD" ] || [ -x "/bin/$CMD" ] && { echo "do-log 用 $CMD,cron 的 PATH 里找得到,不动"; exit 0; } ;;
|
|
30
30
|
esac
|
|
31
|
-
|
|
31
|
+
# 经环境变量传给 awk:-v 会把行里的反斜杠当转义处理,匹配不上
|
|
32
|
+
NEW=$(printf '%s\n' "$CUR" | LINE="$LINE" WANT="$WANT" awk '$0 == ENVIRON["LINE"] { print ENVIRON["WANT"]; next } { print }')
|
|
32
33
|
WHAT="do-log 那一行指向的命令不存在,已改成标准写法。原来是:$LINE"
|
|
33
34
|
else
|
|
34
35
|
NEW=$(printf '%s\n%s\n' "$CUR" "$WANT")
|
|
35
36
|
WHAT="aaden 的 crontab 里没有 do-log,已补上"
|
|
36
37
|
fi
|
|
37
38
|
|
|
38
|
-
|
|
39
|
+
# 新内容先写临时文件再 crontab <文件>:不能 printf | sudoS crontab -,sudoS 自己用 echo 密码 | sudo -S 占了 stdin,
|
|
40
|
+
# 要密码的设备上 crontab 读到的是空 → 整份 crontab 被清空(免密的设备上读到密码那一行、格式不对拒收)。
|
|
41
|
+
# 写之前备份;写完读回来行数少了或没有 do-log 就还原。
|
|
42
|
+
TMP=$(mktemp) && BAK=$(mktemp) || { echo "建临时文件失败"; exit 1; }
|
|
43
|
+
printf '%s\n' "$CUR" > "$BAK"
|
|
44
|
+
printf '%s\n' "$NEW" > "$TMP"
|
|
45
|
+
chmod 644 "$TMP" "$BAK"
|
|
46
|
+
sudoS cp "$BAK" "/etc/aaden/config/crontab-aaden.bak.$(date +%Y%m%d%H%M%S)" 2>/dev/null
|
|
47
|
+
sudoS crontab -u aaden "$TMP" || { echo "写 crontab 失败"; rm -f "$TMP" "$BAK"; exit 1; }
|
|
48
|
+
AFTER=$(sudoS crontab -l -u aaden 2>/dev/null)
|
|
49
|
+
if ! printf '%s\n' "$AFTER" | grep -qxF "$WANT" || [ "$(printf '%s\n' "$AFTER" | grep -c .)" -lt "$(printf '%s\n' "$CUR" | grep -c .)" ]; then
|
|
50
|
+
echo "改完读回来不对,还原原来的 crontab"
|
|
51
|
+
sudoS crontab -u aaden "$BAK"
|
|
52
|
+
rm -f "$TMP" "$BAK"
|
|
53
|
+
exit 1
|
|
54
|
+
fi
|
|
55
|
+
rm -f "$TMP" "$BAK"
|
|
39
56
|
echo "$WHAT"
|
|
40
57
|
DEVICE_ID=$(grep -e DeviceId /var/www/html/Resource/config/config.ini 2>/dev/null | cut -d = -f 2 | tr -d '" \r')
|
|
41
58
|
[ -n "$DEVICE_ID" ] && python3 -c 'import json, sys, urllib.request; urllib.request.urlopen(urllib.request.Request("https://cloud-v2.aaden.io/deviceLog/createEvent", json.dumps({"deviceId": sys.argv[1], "content": sys.argv[2] + " result:0", "type": "系统生成", "operator": "patch ensureDoLogCron"}).encode(), {"Content-Type": "application/json"}), timeout=10)' "$DEVICE_ID" "$WHAT" 2>/dev/null
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# 一次性修复:aaden 的 crontab 里 do-log 不是每 5 分钟跑的,改成 */5。
|
|
3
|
+
# 起因:10-08 用诊断命令查 1541,发现它的 do-log 写成了 "59 4 * * *"——每天只在 04:59 上报一次,
|
|
4
|
+
# 云端看它一直「失联」,也领不到云端命令(命令和自动补跑都挂在 do-log 上)。
|
|
5
|
+
# 202610072130ensureDoLogCron.sh 只查了 do-log 那一行在不在、命令存不存在,没查频率,所以要再跑一遍。
|
|
6
|
+
# 只改那一行(@reboot 那行不动),其它行原样保留;改了就把原来那行报给云端。
|
|
7
|
+
sudoS() { echo "Innerken322." | sudo -S -p '' "$@"; }
|
|
8
|
+
CLI=/usr/local/bin/aaden-cli
|
|
9
|
+
WANT="*/5 * * * * $CLI do-log"
|
|
10
|
+
|
|
11
|
+
[ -x "$CLI" ] || { echo "没有 $CLI,跳过"; exit 0; }
|
|
12
|
+
# do-log 在 root 的 crontab 或 /etc/cron.d 里的老设备:不往 aaden 这边加,免得每 5 分钟报两次
|
|
13
|
+
if sudoS crontab -l -u root 2>/dev/null | grep -v '^[[:space:]]*#' | grep -q 'do-log' \
|
|
14
|
+
|| grep -rqs --exclude='*.dpkg-*' 'aaden-cli do-log' /etc/cron.d 2>/dev/null; then
|
|
15
|
+
echo "do-log 在 root 的 crontab 或 /etc/cron.d 里,不动 aaden 的"; exit 0
|
|
16
|
+
fi
|
|
17
|
+
CUR=$(sudoS crontab -l -u aaden 2>/dev/null) || { echo "aaden 没有 crontab,跳过(整套定时任务缺失要 aaden-cli fix-cronjob)"; exit 0; }
|
|
18
|
+
|
|
19
|
+
# 定时的那一行(不算 @reboot)
|
|
20
|
+
LINE=$(printf '%s\n' "$CUR" | grep -v '^[[:space:]]*#' | grep -v '^[[:space:]]*@' | grep -m1 'do-log')
|
|
21
|
+
if [ -n "$LINE" ]; then
|
|
22
|
+
SCHED=$(printf '%s' "$LINE" | awk '{print $1, $2, $3, $4, $5}')
|
|
23
|
+
CMD=$(printf '%s' "$LINE" | awk '{print $6}')
|
|
24
|
+
OK_CMD=0
|
|
25
|
+
case "$CMD" in
|
|
26
|
+
/*) [ -x "$CMD" ] && OK_CMD=1 ;;
|
|
27
|
+
*) { [ -x "/usr/bin/$CMD" ] || [ -x "/bin/$CMD" ]; } && OK_CMD=1 ;;
|
|
28
|
+
esac
|
|
29
|
+
if [ "$SCHED" = "*/5 * * * *" ] && [ "$OK_CMD" = 1 ]; then
|
|
30
|
+
echo "do-log 每 5 分钟、命令存在,不动"; exit 0
|
|
31
|
+
fi
|
|
32
|
+
# 经环境变量传给 awk:-v 会把行里的反斜杠当转义处理,匹配不上
|
|
33
|
+
NEW=$(printf '%s\n' "$CUR" | LINE="$LINE" WANT="$WANT" awk '$0 == ENVIRON["LINE"] { print ENVIRON["WANT"]; next } { print }')
|
|
34
|
+
WHAT="do-log 定时任务不对,已改成每 5 分钟。原来是:$LINE"
|
|
35
|
+
else
|
|
36
|
+
NEW=$(printf '%s\n%s\n' "$CUR" "$WANT")
|
|
37
|
+
WHAT="aaden 的 crontab 里没有定时的 do-log,已补上每 5 分钟一次"
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
# 新内容先写临时文件再 crontab <文件>:不能 printf | sudoS crontab -,sudoS 自己用 echo 密码 | sudo -S 占了 stdin,
|
|
41
|
+
# 要密码的设备上 crontab 读到的是空 → 整份 crontab 被清空(免密的设备上读到密码那一行、格式不对拒收)。
|
|
42
|
+
# 写之前备份;写完读回来行数少了或没有 do-log 就还原。
|
|
43
|
+
TMP=$(mktemp) && BAK=$(mktemp) || { echo "建临时文件失败"; exit 1; }
|
|
44
|
+
printf '%s\n' "$CUR" > "$BAK"
|
|
45
|
+
printf '%s\n' "$NEW" > "$TMP"
|
|
46
|
+
chmod 644 "$TMP" "$BAK"
|
|
47
|
+
sudoS cp "$BAK" "/etc/aaden/config/crontab-aaden.bak.$(date +%Y%m%d%H%M%S)" 2>/dev/null
|
|
48
|
+
sudoS crontab -u aaden "$TMP" || { echo "写 crontab 失败"; rm -f "$TMP" "$BAK"; exit 1; }
|
|
49
|
+
AFTER=$(sudoS crontab -l -u aaden 2>/dev/null)
|
|
50
|
+
if ! printf '%s\n' "$AFTER" | grep -qxF "$WANT" || [ "$(printf '%s\n' "$AFTER" | grep -c .)" -lt "$(printf '%s\n' "$CUR" | grep -c .)" ]; then
|
|
51
|
+
echo "改完读回来不对,还原原来的 crontab"
|
|
52
|
+
sudoS crontab -u aaden "$BAK"
|
|
53
|
+
rm -f "$TMP" "$BAK"
|
|
54
|
+
exit 1
|
|
55
|
+
fi
|
|
56
|
+
rm -f "$TMP" "$BAK"
|
|
57
|
+
echo "$WHAT"
|
|
58
|
+
DEVICE_ID=$(grep -e DeviceId /var/www/html/Resource/config/config.ini 2>/dev/null | cut -d = -f 2 | tr -d '" \r')
|
|
59
|
+
[ -n "$DEVICE_ID" ] && python3 -c 'import json, sys, urllib.request; urllib.request.urlopen(urllib.request.Request("https://cloud-v2.aaden.io/deviceLog/createEvent", json.dumps({"deviceId": sys.argv[1], "content": sys.argv[2] + " result:0", "type": "系统生成", "operator": "patch fixDoLogSchedule"}).encode(), {"Content-Type": "application/json"}), timeout=10)' "$DEVICE_ID" "$WHAT" 2>/dev/null
|
|
60
|
+
exit 0
|