Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 20 Dec 2007 20:21:59 +0100
From:      Miroslav Lachman <000.fbsd@quip.cz>
To:        freebsd-stable@FreeBSD.ORG
Subject:   Re: jlogin.sh - a small nice jails helper!
Message-ID:  <476AC0D7.7090402@quip.cz>
In-Reply-To: <200712201741.lBKHfDRb069152@lurza.secnetix.de>
References:  <200712201741.lBKHfDRb069152@lurza.secnetix.de>

next in thread | previous in thread | raw e-mail | index | archive | help
Oliver Fromme wrote:
> Miroslav Lachman wrote:
>  > It is nice idea, but I think you should have a better scripting style ;)
> 
> Yes, it almost looked like perl.  :-)
> May I suggest a few further improvements?
> 
>  > login_shell="/bin/tcsh"
> 
> I certainly wouldn't want tcsh.  How about looking at
> $SHELL, and if it doesn't exist, then fall back to the
> standard shell (which is /bin/sh).

I have tought about optional second argument with shell name, your idea 
about $SHELL is also good.

> Also, the last command (jexec) should be preceded by
> "exec" so the shell doesn't hang around.  So the last
> part of the script would look like this:
> 
>     jail_path=$(jls | awk '$1=='$jail_id' {print $4}')
> 
>     if [ -z "$SHELL" -o ! -x "$jail_path/$SHELL" ]; then
>             login_shell="$SHELL"
>     else
>             login_shell="/bin/sh"
>     fi
> 
>     echo "Logging in to $jail_hostname"
>     exec jexec $jail_id $login_shell
> 
> Best regards
>    Oliver
> 
> PS:  By the way, here's another useful script that displays
> processes running in jails, ordered by jail IDs:
> 
> http://www.secnetix.de/~olli/scripts/jps

I am using your jps in slightly modified version ;)

ME="${0##*/}"

Usage()
{
	cat <<-tac

		$ME  --  List processes that are running inside a jail.
		This is intended to complement the standard jls(8) command.

		Usage:
		$ME            list all jailed processes
		$ME <JID>      list only processes in jail <JID>

		Run the jls(8) command to get a list of jails and JIDs.

	tac
	exit 1
}

if [ $# -gt 2 ]; then
	Usage
fi

if [ $# -eq 1 ]; then
	case "$1" in
		""|*[!0-9]*)	Usage ;;
	esac
	FILTER='$1=="'$1'"'
	sum_jid="$1"
	jname=`jls | awk "$FILTER"'{ print $3 }'`
else
	FILTER='$1!="0"'
	sum_jid="all"
	jname="-"
fi

ps -axww -o jid,pid,%mem,rss,user,command | awk '$1!~/[0-9]/||'"$FILTER" 
| sort -n

echo
echo "=============================="
echo " summary for JID $sum_jid / $jname"
echo " %MEM    RSS       VSZ   %CPU "

ps -axww -o jid,%mem,rss,vsz,%cpu | awk '$1!~/[0-9]/||'"$FILTER" | awk 
'{ sm += $2; sp += $3; sv += $4; sc += $5 } END { printf(" %3d %9i %9i 
%3d \n", sm, sp, sv, sc) }'

#--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?476AC0D7.7090402>