省流:将 Linux 服务器的一些信息定时推送到你的手机上。成品效果如下:

iPhone_Bark_app
iPhone_Bark_app

推送服务

  1. Bark:免费,没啥限制。但客户端只有 iOS、iPadOS 和 macOS。
  2. Server 酱・Turbo 版:免费额度一天 5 次,勉强够用,不过客户端支持范围广(app、微信、QQ、飞书、钉钉等)。
  3. Server 酱 ³:注册会送一些点数,翻了翻文档,也不太清楚一条消息用多少点数,客户端支持方面同上。

当前我在用的是 Bark,使用教程很简单,可见使用教程。它这个也挺好用的 Bark Sender - 让浏览器给 iPhone 发推送

我正在用的脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash

# 需要改成自己的key
BARK_URL="https://api.day.app/your_key"

# 获取脚本输出
CONTENT=$(/analyzeSysInfo.sh)$'\n'$'\n'$(/proxy_test.sh)$'\n'$'\n'$(/ip_scan.sh)

current_time=$(date +"%m/%d %H:%M")

jq -n \
--arg title "简报 $current_time" \
--arg body "$CONTENT" \
'{title:$title, body:$body}' \
| curl -s -X POST "$BARK_URL" \
-H 'Content-Type: application/json; charset=utf-8' \
--data-binary @-

计划任务

这个一般只要有安装 Linux 服务区面板的都会自带的。没有面板的话,看看 Linux crontab 命令Crontab.guru 吧。

系统日志

运行信息

首次获取 CPU 温度前需要先 apt-get install lm-sensors,不需要请删除 cpu_temp 相关内容。我是每分钟执行一次。

getSysInfo.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/bin/bash

LOG_DIR=/log
mkdir -p "$LOG_DIR"

TS=$(date '+%F %T')
TS_EPOCH=$(date +%s)
LOG_FILE="$LOG_DIR/sys_stat_$(date '+%F').csv"

# CSV 头
if [ ! -f "$LOG_FILE" ]; then
echo "timestamp,epoch,load1,load5,load15,cpu_usage,mem_usage,disk_usage,cpu_temp,top_cpu_proc,top_cpu_pct,top_mem_proc,top_mem_pct" >> "$LOG_FILE"
fi

# Load
read load1 load5 load15 <<< $(uptime | awk -F'load average:' '{print $2}' | tr -d ',')

# CPU usage
cpu_usage=$(top -bn1 | awk '/Cpu\(s\)/{printf "%.2f", 100-$8}')

# Memory usage
mem_usage=$(free | awk '/Mem/{printf "%.2f", $3/$2*100}')

# Disk usage
disk_usage=$(df -h / | awk 'NR==2{gsub("%","");print $5}')

# CPU temp
cpu_temp=$(sensors 2>/dev/null \
| awk '/\+?[0-9]+(\.[0-9]+)?°C/ {
gsub("[+°C]","",$2);
print $2;
exit
}')


# Top CPU process
read top_cpu_proc top_cpu_pct <<< $(ps -eo comm,%cpu --sort=-%cpu | awk 'NR==2{print $1,$2}')

# Top MEM process
read top_mem_proc top_mem_pct <<< $(ps -eo comm,%mem --sort=-%mem | awk 'NR==2{print $1,$2}')

echo "$TS,$TS_EPOCH,$load1,$load5,$load15,$cpu_usage,$mem_usage,$disk_usage,$cpu_temp,$top_cpu_proc,$top_cpu_pct,$top_mem_proc,$top_mem_pct" >> "$LOG_FILE"

脚本分析

我是按 4 小时分析一次,需要改时间的话修改 START 和最下方两行 awk 即可。

analyzeSysInfo.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/bin/bash

LOG_DIR=/log
DATE=$(date '+%F')
LOG_FILE="$LOG_DIR/sys_stat_${DATE}.csv"
START=$(date -d '4 hours ago' +%s)

stat_col() {
col=$1
label=$2
unit=$3

awk -F',' -v s="$START" -v c="$col" '
NR>1 && $2>=s && $c!="" && $c!="NaN" {print $c}
' "$LOG_FILE" \
| sort -n \
| awk -v label="$label" -v unit="$unit" '
{a[NR]=$1; sum+=$1}
END{
if(NR==0){print label ":无有效数据"; exit}
printf "%-12s Ave. %.1f%s Min. %.1f%s Max. %.1f%s Mid. %.1f%s\n",
label, sum/NR,unit, a[1],unit, a[NR],unit,
(NR%2?a[(NR+1)/2]:(a[NR/2]+a[NR/2+1])/2),unit
}'
}

stat_col 9 "CPU 温度" "℃"
stat_col 6 "CPU 使用率" "%"
stat_col 7 "内存占用率" "%"

echo -n "CPU 最常见瓶颈进程: "
awk -F',' -v s="$START" '
NR>1 && $2>=s && $10!="" {print $10}
' "$LOG_FILE" | sort | uniq -c | sort -nr | awk 'NR==1{print $2 "(" $1 " 次)/4h"}'

echo -n "内存占用最高进程: "
awk -F',' -v s="$START" '
NR>1 && $2>=s && $12!="" {print $12}
' "$LOG_FILE" | sort | uniq -c | sort -nr | awk 'NR==1{print $2 "(" $1 " 次)/4h"}'

代理测试

proxy_test.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash

# 代理端口表 格式:inbound,port,remark
CSV_FILE="/proxy.csv"
TARGET_URL="https://www.google.com"
TIMEOUT=5

# 表头
echo "PORT | REMARK | TLS(ms) | STATUS"

while IFS=',' read -r inbound port remark; do
[ -z "$port" ] && continue

result=$(curl -o /dev/null -s \
--socks5-hostname 127.0.0.1:$port \
--connect-timeout $TIMEOUT \
-w "%{time_connect} %{time_appconnect}" \
"$TARGET_URL")

if [ $? -eq 0 ]; then
tls_ms=$(echo "$result" | awk '{printf "%.0f", $2 * 1000}')
echo "$port|${remark}|$tls_ms|OK"
else
echo "$port|${remark}|-|-|NG"
fi

done < "$CSV_FILE" | column -t -s '|'

局域网设备

首次使用前 apt-get insall arp-scan

ip_scan.sh
1
2
3
4
#!/bin/bash

arp-scan --localnet | awk '/^[0-9]/ {$2=""; print $0}'


网站地图 | 状态监测 | 皮带张力测试 | File Server | 博友圈 | 博客说
Copyright 2022-2026 | Powered by Hexo 7.3.0 & Stellar 1.33.1
总访问量次 |