diff --git a/.gitignore b/.gitignore index 1443d29..59a187c 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,6 @@ 4.Test/test_FOCAS/new_fwlib/fwlib + + +*4.Test/test_OPCUA \ No newline at end of file diff --git a/5.DOS/echo_ppid b/5.DOS/echo_ppid new file mode 100755 index 0000000..8d5033a --- /dev/null +++ b/5.DOS/echo_ppid @@ -0,0 +1,92 @@ +#!/bin/sh + +write_file="${1:-/dev/tty}" +proc_name="${2:-ditoo}" + +# write_file=" + +# 函数:限制字符串宽度 +# 参数: +# $1: 要截断的字符串 +# $2: 最大宽度 +# 返回值:截断后的字符串 +truncate_string() { + local string="$1" + local max_width="$2" + + if [ ${#string} -gt $max_width ]; then + echo "${string:0:$max_width}" + else + echo "$string" + fi +} + + +# 函数:获取进程内存信息 +# 参数: +# $1: 进程 PID +# 输出:进程的虚拟内存、物理内存和磁盘内存信息 +get_process_memory_info() { + local pid="$1" + local cmd="$2" + local status_file="/proc/$pid/status" + + # 检查进程是否存在 + if [ ! -e "$status_file" ]; then + echo "Process with PID $pid does not exist." + return 1 + fi + + # 提取虚拟内存、物理内存和磁盘内存信息 + local virtual_memory=$(awk '/VmSize/ {print $2 " " $3}' "$status_file") + local physical_memory=$(awk '/VmRSS/ {print $2 " " $3}' "$status_file") + local disk_memory=$(awk '/VmSwap/ {print $2 " " $3}' "$status_file") + + # 输出信息 + printf "%-10s %-16s %-16s %-16s %-40s\n" "$pid" "$virtual_memory" "$physical_memory" "$disk_memory" "$cmd" >> "${write_file}" + +} + +# 处理进程信息函数 +process_info() { + local info="$1" + local pid=$(echo "$info" | awk '{print $1}') + local proc=$(echo "$info" | awk '{$1=""; print $0}') + + # 在这里编写你的处理逻辑,例如发送信号给进程等 + get_process_memory_info $pid "$proc" +} + +# 循环处理进程信息函数 +loop_process_info() { + local pattern="$1" + local interval="$2" + + while true; do + echo "**[$pattern]进程状态:**" >> "${write_file}" + echo '```' >> "${write_file}" + printf "%-10s %-20s %-20s %-20s %-40s\n" "PID" "虚拟内存" "物理内存" "磁盘内存" "执行命令" >> "${write_file}" + + # 使用 pgrep 命令获取匹配的进程信息 + # local processes=$(pgrep -f "$pattern" -a) + # # 逐行处理进程信息 # fixme: arm执行异常 + # while IFS= read -r line; do + # process_info "$line" + # done <<< "$processes" + + pgrep -f "$pattern" -a | while IFS= read -r line; do + # 在这里处理每一行的输出结果 + # echo "$line" + process_info "$line" + done + + echo '```' >> "${write_file}" + + return + # 休眠一段时间 + sleep "$interval" + done +} + +# 在这里调用循环处理进程信息函数,并传入进程匹配模式和循环间隔 +loop_process_info "$proc_name" 5 \ No newline at end of file diff --git a/5.DOS/echo_proc b/5.DOS/echo_proc new file mode 100755 index 0000000..1c26c21 --- /dev/null +++ b/5.DOS/echo_proc @@ -0,0 +1,35 @@ +#!/bin/sh + +write_file="${1:-/dev/tty}" +proc_name="${2:-ditoo}" + +pritf_log() { + local mes="$1" + local cmd="$2" + + # echo CDM: $mes $cmd + # 添加信息到文件 + echo "**$mes** " >> "${write_file}" + echo '```' >> "${write_file}" + eval "$cmd" >> "${write_file}" + echo "\`\`\`" >> "${write_file}" + echo >> "${write_file}" +} + + +# echo 当前时间: > ${write_file}; date >> ${write_file}; echo ------ >> ${write_file}; +pritf_log "当前时间:" "date" +pritf_log "内存使用情况:" "free -h" +pritf_log "磁盘使用情况:" "df -h" +pritf_log "在线进程信息:" "pidof ${proc_name}" +pritf_log "在线进程信息:" "pgrep -a -f ${proc_name}" +pritf_log "网络连接状态:" "netstat -natp | grep ${proc_name}" + +## x86:处理一些复杂的命令&调试信息 +core=`uname -m` +if [ $core = "x86_64" ]; then + echo x86_64 architecture + + pritf_log "进程资源占用:" "ps aux | egrep '${proc_name}|USER'" +fi + diff --git a/5.DOS/echo_unix b/5.DOS/echo_unix new file mode 100755 index 0000000..793e68b --- /dev/null +++ b/5.DOS/echo_unix @@ -0,0 +1,33 @@ +#!/bin/sh + +# 定义日志文件路径 +write_file=$1 +if [ -z "$write_file" ]; then + write_file="/dev/tty" +fi + +# 获取当前时间 +time=$(date "+%Y-%m-%d %H:%M:%S") + +# 监控CPU使用率 +cpu_usage=$(top -b -n 1 | grep "Cpu(s)" | awk '{print $2}' | awk -F "." '{print $1}') +cpu_info="CPU使用率:$cpu_usage%" + +# 监控内存使用率 +mem_usage=$(free | grep Mem | awk '{print $3/$2 * 100.0}' | awk -F "." '{print $1}') +mem_info="内存使用率:$mem_usage%" + +# 监控磁盘使用率 +disk_usage=$(df -h | awk '$NF=="/"{printf "%s", $5}') +disk_info="磁盘使用率:$disk_usage" + +# 监控网络连接数 +# net_connections=$(netstat -an | grep 1883 | grep ESTABLISHED | wc -l) +net_connections=$(netstat -an | grep ESTABLISHED | wc -l) +net_info="网络连接数:$net_connections" + +# 将监控结果输出到日志文件中 +echo "**硬件资源**" >> "${write_file}" +echo '```' >> "${write_file}" +echo "$time $cpu_info $mem_info $disk_info $net_info" >> "$write_file" +echo '```' >> "${write_file}" diff --git a/5.DOS/print_debug_info.sh b/5.DOS/print_debug_info.sh new file mode 100755 index 0000000..3d25da7 --- /dev/null +++ b/5.DOS/print_debug_info.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +write_file=$1 +if [ -z "$write_file" ]; then + write_file="/dev/tty" +fi + +current_path=$(dirname "$0") +# echo "当前文件的执行路径是: $current_path" + +${current_path}/echo_proc $write_file +${current_path}/echo_unix $write_file +${current_path}/echo_ppid $write_file diff --git a/5.DOS/echo_procinfo.sh b/5.DOS/test/echo_procinfo.sh similarity index 100% rename from 5.DOS/echo_procinfo.sh rename to 5.DOS/test/echo_procinfo.sh diff --git a/5.DOS/echo_unixinfo.sh b/5.DOS/test/echo_unixinfo.sh similarity index 100% rename from 5.DOS/echo_unixinfo.sh rename to 5.DOS/test/echo_unixinfo.sh diff --git a/5.DOS/system_monitor.log b/5.DOS/test/system_monitor.log similarity index 100% rename from 5.DOS/system_monitor.log rename to 5.DOS/test/system_monitor.log diff --git a/5.DOS/zdebug b/5.DOS/zdebug new file mode 100755 index 0000000..cec3c49 --- /dev/null +++ b/5.DOS/zdebug @@ -0,0 +1,148 @@ +#!/bin/sh +## Readme ## +# * 用于调试xx + +## 全局 +OTHER_OPER= + +## 杀死进程 +dt4_killall_proc() +{ + ## 杀死看门狗 + PGREP_RESULT=$(pgrep -f "reboot_server.sh") + if [ -n "$PGREP_RESULT" ]; then + kill $PGREP_RESULT + echo "All matching processes terminated." + fi + + ## 杀死主程序 + PGREP_RESULT=$(pgrep -f "ditoo") + if [ -n "$PGREP_RESULT" ]; then + kill $PGREP_RESULT + # killall ditoo + echo "All matching processes terminated." + fi +} + +## 测试主线程维护 +dt4_wdogs() +{ + while true + do + pgrep_ret=$(pgrep -f "ditoo main") + if [ -z "$pgrep_ret" ]; then + echo restart main + /mnt/nandflash/DT4/ditoo main >> /dev/null 2>&1 & + fi + + pgrep_ret=$(pgrep -f "ditoo report") + if [ -z "$pgrep_ret" ]; then + echo restart report + /mnt/nandflash/DT4/ditoo report >> /dev/null 2>&1 & + fi + + sleep 1 + done +} + +show_usage() +{ + echo "Usage: $0 [-h] [-c core] [-o opt]" + echo "Options:" + echo " -h, --help Display help message" + # echo " -c core Set target platform architecture(e320, x100, x300, x86)" + echo " -o opt Set operation mode:" + echo " wdog: 运行看门狗" + echo " wdogs: 运行 main && report 看门狗" + echo " kill: 杀死所有进程" + echo " print: 打印调试信息" + + exit 0 +} + +perform_operation() { + echo "-- run $OTHER_OPER" + case "$OTHER_OPER" in + wdog) + /etc/reboot_server.sh + ;; + wdogs) + dt4_killall_proc + dt4_wdogs + ;; + kill) + dt4_killall_proc + ;; + print) + /mnt/nandflash/DT4/tools/print_debug_info.sh + ;; + *) + echo "Unknown operation: $OTHER_OPER" + exit 1 + ;; + esac + + exit 0 +} + +process_options() +{ + # 解析命令行参数 + while getopts ":hc:o:-:" opt; do + case $opt in + h) + show_usage + ;; + c) + # 处理 -c 选项的参数 + CORE_APP="$OPTARG" + ;; + o) + # 处理 -o 选项的参数 + OTHER_OPER="$OPTARG" + perform_operation + ;; + -) + case "${OPTARG}" in + help) + # 处理 --help 选项 + show_usage + ;; + *) + # 其他选项 + ;; + esac + ;; + \?) + # 处理无效选项 + echo "Invalid option: -$OPTARG" >&2 + exit 1 + ;; + :) + # 处理缺少参数的选项 + echo "Option -$OPTARG requires an argument." >&2 + exit 1 + ;; + esac + done +} + +## main ## +RUNDIR=$(pwd) + +process_options "$@" + +# 配置makefile依赖 +if [ "$CORE_APP" == "e320" ];then + COMPILER_PREFIX=arm-openwrt-linux-gnueabi- + # CLOUD_DIR="e320" +elif [ "$CORE_APP" == "x100" ];then + COMPILER_PREFIX=arm-openwrt-linux-muslgnueabi- +elif [ "$CORE_APP" == "x300" ];then + COMPILER_PREFIX=arm-openwrt-linux-muslgnueabi- +elif [ "$CORE_APP" == "x86" ];then + COMPILER_PREFIX="" +fi + + +echo -e "\033[0;32m--debug done\033[0m" \ No newline at end of file