Networking

Unix and Linux network configuration. Multiple network interfaces. Bridged NICs. High-availability network configurations.

Applications

Reviews of latest Unix and Linux software. Helpful tips for application support admins. Automating application support.

Data

Disk partitioning, filesystems, directories, and files. Volume management, logical volumes, HA filesystems. Backups and disaster recovery.

Monitoring

Distributed server monitoring. Server performance and capacity planning. Monitoring applications, network status and user activity.

Commands & Shells

Cool Unix shell commands and options. Command-line tools and application. Things every Unix sysadmin needs to know.

Home » Commands & Shells

Contacting the sysadmin from command line

Submitted by on September 28, 2006 – 11:10 pm

If you are a sysadmin, communicating with your users is an important aspect of your job. Phone, e-mail, SMS, and various service request systems are commonly used by most businesses. The problem with all these tools is that they require time and a certain degree of effort.

It is definitely important for a sysadmin to separate himself from the users with some bureaucracy: otherwise no work is going to be done, with all time being spent on the phone or reading e-mails. However, in any environment there is a particular class of users – application focals, network admins, database administrators – who can help the sysadmin to detect and troubleshoot a problem early before is becomes a major outage.

The following Korn shell script allows select users to contact you simply by typing your name and a brief message at the command line of a Unix server or workstation. This script has been written for Solaris but it can be easily modified for any other Unix operating environment.

#!/bin/ksh

# 2006-09-28
# krazyworks.com

TEXT=$(echo $*)

#---------------------------------------------------------------
# FUNCTIONS
#---------------------------------------------------------------

log() {
	LOG="$HOME/igor.log"
	TMP="/tmp/igor_log.tmp"
	LINELIM=1000 ; LINEBUF=50 ; (( LINEMAX = LINELIM + LINEBUF ))

	if [ ! -r "$LOG" ]
	then
		touch "$LOG"
	fi

	if [ -f "$LOG" ] && [ `wc -l "$LOG" | awk '{print $1}'` -gt $LINEMAX ]
	then
		cat "$LOG" | tail -$LINELIM > "$TMP"
		mv "$TMP" "$LOG"
	fi

	chmod 777 "$LOG"
}

#---------------------------------------------------------------

message() {
	if [ ! $TAIL ]
	then
		TAIL=1
	else
		(( TAIL = TAIL + 1 ))
	fi
	echo "`hostname`	`date +'%Y-%m-%d %T'`	$MSG" >> "$LOG"
	tail -1 "$LOG"
}

#---------------------------------------------------------------

configure() {
	USER=$(id | awk -F'(' '{print $2}' | awk -F')' '{print $1}')
        HOST=$(hostname)
	FROM="${USER}@${HOST}"
	DEST="your_email@host.domain your_pager@host.domain"
	SUBJ="Message from $USER on $HOST"
	MAIL="/bin/mailx"
	USERS="root oracle user1 user2 user3"

	if [ ! -x $MAIL ]
	then
		MSG=$(echo "Error: $MAIL executable not found!") ; message
		exit 1
	fi
}

#---------------------------------------------------------------

send() {
	if [ `echo $USERS | grep -c $USER` -gt 0 ]
	then
		echo "$TEXT" |  $MAIL -r "$FROM" -s "$SUBJ" "$DEST"
	else
		MSG=$(echo "Error: User $USER is not allowed to run this script!") ; message
		exit 1
	fi
}

#---------------------------------------------------------------

confirm() {
	MSG=$(echo "Your message saying - $TEXT - has been sent.") ; message
}

#---------------------------------------------------------------
# RUNTIME
#---------------------------------------------------------------

case `uname -s -r` in

# --- SunOS --------------------------------
	"SunOS 5.6")	log
			configure
			send
			confirm ;;
	# ----------------------------------
	"SunOS 5.7")	log
			configure
			send
			confirm ;;
	# ----------------------------------
	"SunOS 5.8")	log
			configure
			send
			confirm ;;
	# ----------------------------------
	"SunOS 5.9")	log
			configure
			send
			confirm ;;
	# ----------------------------------
	"SunOS 5.10")	log
			configure
			send
			confirm ;;
	# ----------------------------------
	"SunOS 5.11")	log
			configure
			send
			confirm ;;
	# ----------------------------------
	*)		echo "`uname -s -r` is not supported by this script. Exiting..."
			exit 1 ;;
esac

Save this script as your name in a common executable directory like /usr/sbin. For example: /usr/sbin/Mike. Set file ownership to allow users to execute the file. You can use additional group ownership settings to further restrict access.

All a user would need to do to get your attention is to type something like:

> Mike please run the root.sh script so I can complete Oracle installation

Print Friendly, PDF & Email

Leave a Reply