aaden-cli 1.6.114 → 1.6.116

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.
@@ -4,10 +4,23 @@ sudoS() { echo "Innerken322." | sudo -S -p '' "$@"; }
4
4
 
5
5
  sudoS npm config set prefix /usr/local
6
6
  cd || exit
7
- sudoS rm -rf ngrok
8
- axel -n 8 "https://aaden-storage.s3.eu-central-1.amazonaws.com/ngrok"
9
- sudoS cp -f ngrok /etc/aaden/ngrok
10
- sudoS chmod +x /etc/aaden/ngrok
7
+ # 用 curl 下载并按 S3 ETag(单段上传 = MD5)校验,对了再装。以前用 axel:家目录里有旧的 ngrok.N 残留时
8
+ # 它把文件存成 ngrok.21 之类,后面 cp ngrok 找不到文件,坏掉的 /etc/aaden/ngrok 一直没换掉
9
+ # (10-08 的 1233:ngrok 启动即 SEGV,systemd 重启了 64 万次)。
10
+ sudoS rm -rf ngrok ngrok.st
11
+ rm -f ngrok.[0-9]* 2>/dev/null
12
+ NGROK_URL="https://aaden-storage.s3.eu-central-1.amazonaws.com/ngrok"
13
+ NGROK_TMP=$(mktemp)
14
+ curl -fsSL "$NGROK_URL" -o "$NGROK_TMP" --max-time 300
15
+ NGROK_WANT=$(curl -sfI "$NGROK_URL" --max-time 30 | awk 'tolower($1)=="etag:"{print $2}' | tr -d '"\r')
16
+ NGROK_GOT=$(md5sum "$NGROK_TMP" | cut -d' ' -f1)
17
+ if [ -s "$NGROK_TMP" ] && { [ -z "$NGROK_WANT" ] || [ "$NGROK_GOT" = "$NGROK_WANT" ]; }; then
18
+ sudoS install -m 755 "$NGROK_TMP" /etc/aaden/ngrok
19
+ echo "ngrok 已重新安装(md5 $NGROK_GOT)"
20
+ else
21
+ echo "ngrok 下载校验失败(下载 $NGROK_GOT / 期望 $NGROK_WANT),保留原文件"
22
+ fi
23
+ rm -f "$NGROK_TMP"
11
24
 
12
25
  DeviceId=$(cat /var/www/html/Resource/config/config.ini | grep -e DeviceId | cut -d = -f 2 | grep '[1-9]*' | sed 's/"//g')
13
26
  aaden-cli update-ngrok-config $DeviceId
@@ -33,6 +33,8 @@ report() {
33
33
  echo "--- 服务日志"
34
34
  sudoS journalctl -u "$SVC" -n 15 --no-pager -q 2>/dev/null
35
35
  fi
36
+ echo "--- ngrok 文件"
37
+ echo "本机 md5 $(md5sum "$NGROK" 2>/dev/null | cut -d' ' -f1) / S3 $(curl -sfI https://aaden-storage.s3.eu-central-1.amazonaws.com/ngrok --max-time 15 | awk 'tolower($1)=="etag:"{print $2}' | tr -d '"\r')"
36
38
  echo "--- 进程"
37
39
  pgrep -a -f "$NGROK "
38
40
  }
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.114"};
19182
+ module.exports = {"i8":"1.6.116"};
19183
19183
 
19184
19184
  /***/ })
19185
19185
 
@@ -36,9 +36,23 @@ else
36
36
  WHAT="aaden 的 crontab 里没有 do-log,已补上"
37
37
  fi
38
38
 
39
- printf '%s\n' "$NEW" | sudoS crontab -u aaden - || { echo "写 crontab 失败"; exit 1; }
40
- # 读回来确认真的改上了
41
- sudoS crontab -l -u aaden 2>/dev/null | grep -qxF "$WANT" || { echo "改完读回来没有标准的 do-log 行,原样:$LINE"; exit 1; }
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"
42
56
  echo "$WHAT"
43
57
  DEVICE_ID=$(grep -e DeviceId /var/www/html/Resource/config/config.ini 2>/dev/null | cut -d = -f 2 | tr -d '" \r')
44
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
@@ -37,9 +37,23 @@ else
37
37
  WHAT="aaden 的 crontab 里没有定时的 do-log,已补上每 5 分钟一次"
38
38
  fi
39
39
 
40
- printf '%s\n' "$NEW" | sudoS crontab -u aaden - || { echo "写 crontab 失败"; exit 1; }
41
- # 读回来确认真的改上了
42
- sudoS crontab -l -u aaden 2>/dev/null | grep -qxF "$WANT" || { echo "改完读回来没有标准的 do-log 行,原样:$LINE"; exit 1; }
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"
43
57
  echo "$WHAT"
44
58
  DEVICE_ID=$(grep -e DeviceId /var/www/html/Resource/config/config.ini 2>/dev/null | cut -d = -f 2 | tr -d '" \r')
45
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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aaden-cli",
3
- "version": "1.6.114",
3
+ "version": "1.6.116",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -36,9 +36,23 @@ else
36
36
  WHAT="aaden 的 crontab 里没有 do-log,已补上"
37
37
  fi
38
38
 
39
- printf '%s\n' "$NEW" | sudoS crontab -u aaden - || { echo "写 crontab 失败"; exit 1; }
40
- # 读回来确认真的改上了
41
- sudoS crontab -l -u aaden 2>/dev/null | grep -qxF "$WANT" || { echo "改完读回来没有标准的 do-log 行,原样:$LINE"; exit 1; }
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"
42
56
  echo "$WHAT"
43
57
  DEVICE_ID=$(grep -e DeviceId /var/www/html/Resource/config/config.ini 2>/dev/null | cut -d = -f 2 | tr -d '" \r')
44
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
@@ -37,9 +37,23 @@ else
37
37
  WHAT="aaden 的 crontab 里没有定时的 do-log,已补上每 5 分钟一次"
38
38
  fi
39
39
 
40
- printf '%s\n' "$NEW" | sudoS crontab -u aaden - || { echo "写 crontab 失败"; exit 1; }
41
- # 读回来确认真的改上了
42
- sudoS crontab -l -u aaden 2>/dev/null | grep -qxF "$WANT" || { echo "改完读回来没有标准的 do-log 行,原样:$LINE"; exit 1; }
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"
43
57
  echo "$WHAT"
44
58
  DEVICE_ID=$(grep -e DeviceId /var/www/html/Resource/config/config.ini 2>/dev/null | cut -d = -f 2 | tr -d '" \r')
45
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