Skip to main content

Message of the day - MOTD

Konfiguracja MOTD w FreeBSD z kolorowym ASCII art i monitorowaniem systemu

Aby stworzyć atrakcyjny, kolorowy MOTD (Message Of The Day) na FreeBSD z nazwą serwera w stylu retro ASCII art oraz wyświetlaniem bieżącego obciążenia CPU, pamięci RAM i pojemności dysków, można przygotować skrypt bash. Takie MOTD może również zawierać status kluczowych procesów serwera gry.

Przykładowy skrypt MOTD w bash (do umieszczenia np. w /etc/motd.sh):

#!/usr/local/bin/bash

# Kolory ANSI
RED='\033[31m'
GREEN='\033[32m'
YELLOW='\033[33m'
CYAN='\033[36m'
RESET='\033[0m'

# Kolorowy ASCII art nazw serwera (retro styl)
echo -e "${CYAN} __  __ _____ ____  ____  ______     __"
echo -e "|  \\/  |_   _|___ \\/ ___||  _ \\ \\   / /"
echo -e "| |\\/| | | |   __) \\___ \\| |_) \\ \\ / / "
echo -e "| |  | | | |  / __/ ___) |  _ < \\ V /  "
echo -e "|_|  |_| |_| |_____|____/|_| \\_\\ \\_/   ${RESET}"

# Pobór średniego obciążenia CPU
LOAD=$(sysctl -n vm.loadavg | awk '{print $2, $3, $4}')

# Pamięć RAM całkowita i wolna (MB)
MEM_TOTAL=$(sysctl -n hw.physmem)
MEM_TOTAL_MB=$((MEM_TOTAL / 1024 / 1024))

PAGE_SIZE=$(sysctl -n hw.pagesize)
FREE_PAGES=$(sysctl -n vm.stats.vm.v_free_count)
MEM_FREE_BYTES=$((FREE_PAGES * PAGE_SIZE))
MEM_FREE_MB=$((MEM_FREE_BYTES / 1024 / 1024))

echo -e "${YELLOW}Aktualne obciążenie CPU:${RESET} ${GREEN}${LOAD}${RESET}"
echo -e "${YELLOW}Pamięć całkowita:${RESET} ${GREEN}${MEM_TOTAL_MB} MB${RESET}"
echo -e "${YELLOW}Wolna pamięć:${RESET} ${GREEN}${MEM_FREE_MB} MB${RESET}"

# Pojemności dysków i procent wolnego miejsca (mount point: % wolnego)
echo -e "${YELLOW}Pojemności dysków (punkt montowania: % wolnego miejsca):${RESET}"
df -h | awk -v CYAN="${CYAN}" -v GREEN="${GREEN}" -v RESET="${RESET}" '
NR>1 {
    free_perc = 100 - gensub(/%/, "", "g", $5)
    printf "%s%s%s: %s%d%%%s  ", CYAN, $6, RESET, GREEN, free_perc, RESET
}
END {print ""}'

# Sprawdzenie statusu procesów gry (game, db, auth)
count_process() {
  ps aux | grep -w "$1" | grep -v grep | wc -l
}

COUNT_GAME=$(count_process "game")
COUNT_DB=$(count_process "db")
COUNT_AUTH=$(count_process "auth")

color_status() {
  if [ "$1" -gt 0 ]; then
    echo -e "${GREEN}RUNNING (${1})${RESET}"
  else
    echo -e "${RED}NOT RUNNING${RESET}"
  fi
}

echo -e "${YELLOW}Status procesów gry MT2SRV:${RESET}"
echo -e "game: $(color_status $COUNT_GAME)"
echo -e "db: $(color_status $COUNT_DB)"
echo -e "auth: $(color_status $COUNT_AUTH)"

# Szczegóły procesów (zielony kolor)
echo -e "${YELLOW}Szczegóły procesów game/db/auth:${RESET}"
ps aux | grep -E 'game|db|auth' | grep -v grep | awk -v GREEN="${GREEN}" -v RESET="${RESET}" '{print GREEN $0 RESET}'

Instrukcje użycia:

  • Zapisz powyższy skrypt w pliku /etc/motd.sh i nadaj mu prawa wykonywalne (chmod +x /etc/motd.sh).
  • Wywołuj ten skrypt z pliku /etc/motd lub ustaw w /etc/login.conf opcję tm=/etc/motd.sh:, aby był uruchamiany przy logowaniu.
  • Pozwoli to na wyświetlanie przy logowaniu kolorowego, retro motdu zawierającego bieżące dane systemowe oraz status procesów gry.

Dzięki temu MOTD będzie czytelne, estetyczne i funkcjonalne, ułatwiając szybką diagnostykę serwera przy każdym logowaniu.