51 lines
1.2 KiB
Bash
51 lines
1.2 KiB
Bash
|
#!/bin/sh
|
||
|
|
||
|
if [ $# -eq 0 ]; then
|
||
|
echo "Usage: $0 <command>"
|
||
|
echo "Example: $0 'npm run build'"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
COMMAND="$@"
|
||
|
LOG_FILE="stats.log"
|
||
|
TEMP_PID_FILE="/tmp/monitor_pid_$$"
|
||
|
|
||
|
# Очищаем старый лог-файл
|
||
|
echo "Timestamp,CPU(%),Memory(GB),Command" > "$LOG_FILE"
|
||
|
|
||
|
# Функция для получения памяти в GB
|
||
|
get_memory_gb() {
|
||
|
local pid=$1
|
||
|
local kb_mem=$(ps -p "$pid" -o rss=)
|
||
|
local gb_mem=$(echo "scale=2; $kb_mem / 1024 / 1024" | bc)
|
||
|
echo "$gb_mem"
|
||
|
}
|
||
|
|
||
|
# Функция для мониторинга
|
||
|
monitor() {
|
||
|
local pid=$1
|
||
|
echo "Monitoring PID: $pid"
|
||
|
while ps -p "$pid" > /dev/null; do
|
||
|
local cpu_usage=$(ps -p "$pid" -o %cpu=)
|
||
|
local mem_usage=$(get_memory_gb "$pid")
|
||
|
echo $mem_usage
|
||
|
local cmd=$(ps -p "$pid" -o cmd=)
|
||
|
echo "$(date '+%Y-%m-%d %H:%M:%S'),$cpu_usage,$mem_usage,$cmd" >> "$LOG_FILE"
|
||
|
sleep 1
|
||
|
done
|
||
|
}
|
||
|
|
||
|
# Запускаем команду
|
||
|
$COMMAND &
|
||
|
CMD_PID=$!
|
||
|
echo "$CMD_PID" > "$TEMP_PID_FILE"
|
||
|
|
||
|
# Начинаем мониторинг
|
||
|
monitor "$CMD_PID"
|
||
|
|
||
|
# Удаляем временный файл
|
||
|
rm -f "$TEMP_PID_FILE"
|
||
|
|
||
|
echo "Monitoring complete. Data saved to $LOG_FILE"
|
||
|
echo "Format: Timestamp, CPU(%), Memory(GB), Command"
|