This is script to get server stats printed in terminal and saved as txt output (or not). I will not explain each command, but for total beginners I will say that commands are piped with I
, so take each command and use with -h
in terminal to get more info.
# example to get help for awk awk -h # commands are piped with | # get free memory with 'free' # output it to 'tail' to print last line free -m | tail -n 1
So here's the full script, you can remove # at last 2 lines to save output and/or show notification on desktop.
#!/usr/bin/env bash # Define Output Log-File (or not) OUTPUT_LOG=~/sys-log.txt # Define Colors R="\e[0m" #reset U="\e[4m" #underline Y="\e[33m" #yellow RED="\e[37m" #light red # Format Date and Time DATE=$(date +%m/%d/%Y) TIME=$(date +%k:%M:%S) DAY=$(date +%A) # User Logged In USER=$(whoami) # System Uptime UPTIME_S=$(uptime -s) UPTIME_P=$(uptime -p) UPTIME=$(uptime -s && uptime -p) # Free Memory FREE=$(free -m | head -n 2 | tail -n 1 | awk {'print $4'}) # Free Swap Memory SWAP=$(free -m | tail -n 1 | awk {'print $3'}) # CPU Idle CPU=$(vmstat 1 2 | sed -n '/[0-9]/p' | sed -n '2p' | awk '{print $15}') # Free Disk Space SPACE=$(df -h / | awk '{ a = $4 } END { print a }') # Define banner to print banner() { echo ---------------------------------------------------------------------- echo -e "$RED" DAY: "$R"$DAY "$RED"'\t'DATE: "$R"$DATE "$RED"'\t'TIME: "$R"$TIME"$R" echo ---------------------------------------------------------------------- } # Define nice-print stats print_stats() { echo -e "$R"WELCOME:"$R"'\t|\t'"$Y"$USER echo -e "$R"UPTIME: "$R"'\t|\t'"$Y"$UPTIME echo -e "$R"FREE MEMORY:"$R"'\t|\t'"$Y"$FREE MB echo -e "$R"FREE SWAP:"$R"'\t|\t'"$Y"$SWAP MB echo -e "$R"CPU IDLE:"$R"'\t|\t'"$Y"$CPU % echo -e "$R"DISK SPACE:"$R"'\t|\t'"$Y"$SPACE } # Define One-Line output log output() { echo "$DATE | $TIME | $USER | $UPTIME_S | $UPTIME_P | $FREE MB | $SWAP MB | $CPU % | $SPACE" } ### ### ### # Execute Defined Functions clear && banner # Print Banner print_stats # Print Stats # output >> $OUTPUT_LOG # Save Output (or not) # Display Desktop Notification # ALERT=$(notify-send -u normal "Free Space : $SPACE | CPU USAGE : $CPU % | Free Mem : $FREE MB") && echo -e $ALERT
Top comments (2)
You've got a few possible improvements in here.
Here's what I found.
Thanks on pointing that out, I'll edit script with your improvements.