LINUX.ORG.RU

История изменений

Исправление Kroz, (текущая версия) :

Для рута:

PS1='\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]> '

Для kroz показывает статусы:
- ftp (запуск, индикатор подключения)
- торренты (запуск)
- sshd (запуск, индикатор подключения)
- apache (запуск)
- svn (запуск)
- emerge (запуск, статус устновки пакетов: сколько всего должно быть установлено и какой по счету устанавливается сейчас)

Каждый статус выводится одной буквой, которая меняет цвет в зависимости от... Только emerge позволено выводить цифры - кол-во пакетов. Так что много места не занимает. Очень удобно.

function _SystemStatus()
{
	SERVICES="ftsave"
	RESULT=""

	# Standard services
	f_SERVICE="proftpd"
	t_SERVICE="transmission-daemon"
	s_SERVICE="sshd"
	a_SERVICE="apache2"
	v_SERVICE="svnserve"

	# Statuses, colors
	C_NONE="\[\033[0;37m\]"
	C_IDLE="\[\033[1;37m\]"
	C_CRTITICAL="\[\033[7;31m\]"
	C_STAT1="\[\033[1;33m\]"
	C_RESET="\[\033[0m\]"


	while [[ -n "$SERVICES" ]]; do
		I="${SERVICES:0:1}"
		SERVICES="${SERVICES:1}"

		STATUS="${I}_STATUS"
		eval $STATUS="NONE"
		
		SERVICE="${I}_SERVICE"
		if [[ -n "$SERVICE" ]]; then
			A=`/etc/init.d/${!SERVICE} status 2>/dev/null` ;
			if [[ "${A##* }" = "started" ]] ; then
							eval $STATUS="IDLE"
			fi
		fi 
		
		VALUE="$I"
		case "$I" in
			"s" ) # ssh
				S_CONNECTIONS=`who | while read U C D T S ; do [[ -n "$S" ]] && [[ "${S:1:1}" != ":" ]] && echo "$U" ; done`
				[[ -n "$S_CONNECTIONS" ]] && s_STATUS="CRTITICAL"
				;;
			"f" ) # ftp
				S_CONNECTIONS=`netstat -n --protocol inet 2>/dev/null | grep ':21 ' | while read P C1 C2 S D E ; do [[ "$E" = "ESTABLISHED" ]] && echo "$S" ; done`
				[[ -n "$S_CONNECTIONS" ]] && f_STATUS="STAT1"
				;;
			"e" ) # emerge
				# if we have merge running
				e_A=`ps ax -o comm= | grep "emerge" | head -n 1 `
				if [[ -n "$e_A" ]] ; then
					e_STATUS="IDLE"
					
					# Note: there should be permiossion to read /var/log/emerge.log
					# emerge started time
					e_eT=`cat /var/log/emerge.log | grep "Started emerge on: " | tail -n 1`
					e_eT="${e_eT:0:10}"
				
					# emerge log record time
					e_A=`cat /var/log/emerge.log | grep "..........:  >>> emerge" | tail -n 1`
					e_lT="${e_A:0:10}" # Log record time
					
					if [[ "$e_lT" -gt "$e_eT" ]]; then
						e_M=`expr match "$e_A" '.*(\([0-9]*\) of'`
						e_N=`expr match "$e_A" '.*([0-9]* of \([0-9]*\)'`
						
						[[ "$e_M" != "" ]] && if [[ "$e_N" != "" ]]; then
							VALUE="$e_M/$e_N"
							e_STATUS="STAT1"
						fi
					fi 
				fi
		esac
		

		######## Output ########
		# TODO: more detailed output - if user wants to see details

		# For prompt
		STATUS="${I}_STATUS";STATUS="${!STATUS}"
		COLOR="C_$STATUS";COLOR="${!COLOR}"

		[[ "$STATUS" != "NONE" ]] && RESULT="${RESULT}${COLOR}${VALUE}${C_RESET}"
	done
	[[ -n "$RESULT" ]] && RESULT="[${RESULT}]"

	PS1="[]\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]> "
	PS1="${PS1/[]/${RESULT}}"
}

PROMPT_COMMAND="_SystemStatus"

Исходная версия Kroz, :

Для рута:

PS1='\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]> '

Для kroz - показывает статусы:
- ftp (запуск, индикатор подключения)
- торренты (запуск)
- sshd (запуск, индикатор подключения)
- apache (запуск)
- svn (запуск)
- emerge (запуск, статус устновки пакетов: сколько всего должно быть установлено и какой по счету устанавливается сейчас)

function _SystemStatus()
{
	SERVICES="ftsave"
	RESULT=""

	# Standard services
	f_SERVICE="proftpd"
	t_SERVICE="transmission-daemon"
	s_SERVICE="sshd"
	a_SERVICE="apache2"
	v_SERVICE="svnserve"

	# Statuses, colors
	C_NONE="\[\033[0;37m\]"
	C_IDLE="\[\033[1;37m\]"
	C_CRTITICAL="\[\033[7;31m\]"
	C_STAT1="\[\033[1;33m\]"
	C_RESET="\[\033[0m\]"


	while [[ -n "$SERVICES" ]]; do
		I="${SERVICES:0:1}"
		SERVICES="${SERVICES:1}"

		STATUS="${I}_STATUS"
		eval $STATUS="NONE"
		
		SERVICE="${I}_SERVICE"
		if [[ -n "$SERVICE" ]]; then
			A=`/etc/init.d/${!SERVICE} status 2>/dev/null` ;
			if [[ "${A##* }" = "started" ]] ; then
							eval $STATUS="IDLE"
			fi
		fi 
		
		VALUE="$I"
		case "$I" in
			"s" ) # ssh
				S_CONNECTIONS=`who | while read U C D T S ; do [[ -n "$S" ]] && [[ "${S:1:1}" != ":" ]] && echo "$U" ; done`
				[[ -n "$S_CONNECTIONS" ]] && s_STATUS="CRTITICAL"
				;;
			"f" ) # ftp
				S_CONNECTIONS=`netstat -n --protocol inet 2>/dev/null | grep ':21 ' | while read P C1 C2 S D E ; do [[ "$E" = "ESTABLISHED" ]] && echo "$S" ; done`
				[[ -n "$S_CONNECTIONS" ]] && f_STATUS="STAT1"
				;;
			"e" ) # emerge
				# if we have merge running
				e_A=`ps ax -o comm= | grep "emerge" | head -n 1 `
				if [[ -n "$e_A" ]] ; then
					e_STATUS="IDLE"
					
					# Note: there should be permiossion to read /var/log/emerge.log
					# emerge started time
					e_eT=`cat /var/log/emerge.log | grep "Started emerge on: " | tail -n 1`
					e_eT="${e_eT:0:10}"
				
					# emerge log record time
					e_A=`cat /var/log/emerge.log | grep "..........:  >>> emerge" | tail -n 1`
					e_lT="${e_A:0:10}" # Log record time
					
					if [[ "$e_lT" -gt "$e_eT" ]]; then
						e_M=`expr match "$e_A" '.*(\([0-9]*\) of'`
						e_N=`expr match "$e_A" '.*([0-9]* of \([0-9]*\)'`
						
						[[ "$e_M" != "" ]] && if [[ "$e_N" != "" ]]; then
							VALUE="$e_M/$e_N"
							e_STATUS="STAT1"
						fi
					fi 
				fi
		esac
		

		######## Output ########
		# TODO: more detailed output - if user wants to see details

		# For prompt
		STATUS="${I}_STATUS";STATUS="${!STATUS}"
		COLOR="C_$STATUS";COLOR="${!COLOR}"

		[[ "$STATUS" != "NONE" ]] && RESULT="${RESULT}${COLOR}${VALUE}${C_RESET}"
	done
	[[ -n "$RESULT" ]] && RESULT="[${RESULT}]"

	PS1="[]\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]> "
	PS1="${PS1/[]/${RESULT}}"
}

PROMPT_COMMAND="_SystemStatus"