SysV Init-скрипт для трафикосчиталки NeTAMS

Аватар пользователя DRVTiny

...Умеет сам себя перекодировать при необходимости! На самом деле самоправящиеся скрипты - довольно неплохая технология в условиях современного зоопарка кодировок.

#!/bin/bash
#
# chkconfig: - 89 14
#
# description: NeTAMS is a traffic accounting daemon
FileWasSavedInENC="koi8-r"
slf="`basename $0`"
# Source function library.
. /etc/rc.d/init.d/functions

. /etc/sysconfig/network

#  Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

NETAMS_CONF="/etc/netams.cfg"
NETAMS_PRG="netams"
NETAMS_BIN="/usr/local/sbin/netams"
NETAMSCTL_BIN="/usr/local/sbin/netamsctl"
NETAMS_ARGS="-lf $NETAMS_CONF"
NETAMS_LOCK="/var/lock/subsys/netams"
NETAMS_PID="/var/run/netams.pid"

CUR_LOCALE="`locale | sed -nr 's/^\s*LANG\s*=\s*(.+)\s*(#.*)?$/\1/p'`"
case "${CUR_LOCALE%%.*}" in
"ru_RU") 
 moALREADY_RUNNING="Похоже, что NeTAMS уже запущен..."
 CUR_ENC="`echo ${CUR_LOCALE#*.} | tr 'A-Z' 'a-z'`"
 if [ "$CUR_ENC" != "$FileWasSavedInENC" ]; then
  iconv2enc=
  [ -z "${CUR_ENC}" ] || iconv2enc="-t $CUR_ENC"
  iconv -f $FileWasSavedInENC $iconv2enc < $0 | sed -r "s%(\ "/tmp/$slf.$$"
  mv -f "/tmp/$slf.$$" "$0" && chmod +x "$0"
  $0 $@
  exit $?
 fi 
;; 
*) moALREADY_RUNNING="NeTAMS seems to be already running..." ;;
esac
moALREADY_RUNNING="$NETAMS_PRG: $moALREADY_RUNNING"

RETVAL=0
prog="netams"
start () { 
	if [ ! -f $NETAMS_PID ]; then
	 echo -n $"Starting $prog: "
	 NETAMS=$NETAMS_BIN\ $NETAMS_ARGS
	 daemon $NETAMS; RETVAL=$?; echo
	 [ $RETVAL -eq 0 ] && touch $NETAMS_LOCK
	else
	 echo $moALREADY_RUNNING  >&2
	 RETVAL=1
	fi 
	return $RETVAL
}

stop () {
	echo -n $"Stopping $prog: "
	$NETAMSCTL_BIN "shutdown" >/dev/null 2>&1 && rm -f $NETAMS_LOCK
	RETVAL=$?
	[ $RETVAL -eq 0 ] && success || failure
	echo
	return $RETVAL
}

status () {
	status $NETAMS_BIN
	[ $? -ne 0 ] && RETVAL=$? || RETVAL=-1
	return $RETVAL
}
on_exit () {
	if [ $RETVAL -eq 0 ]; then
	 success
	elif [ "$RETVAL" != "-1" ]; then
	 failure
	fi
	return 0
}

case "$1" in
 start) start ;;
 stop) stop ;;
 restart) stop; start ;;
 status) status ;;
 *) echo "Usage: $NETAMS_PRG (start|stop|restart|status)" >&2 ;;
esac
exit $RETVAL
Аватар пользователя DRVTiny

Re: SysV Init-скрипт для трафикосчиталки NeTAMS

В данном случае автоматическая перекодировка, возможно, и не слишком актуальна, поскольку в этом скрипте пока что сообщение на русском языке всего одно (ну и завуалированное "Запускается netams: " (спасибо LK за то, что он подсказал мне в своё время, как это реализуется), но оно [сообщение] вынесено в отдельный файл, используемый всеми стартовыми скриптами). Вообще же если не хочется привязываться к реализации интернационализации в том или ином дистрибутиве, решение на базе явного указания в скрипте кодировки, в которой он был сохранён, является наимболее простым и логичным (в особенности если дополнить соотв. функцией автоперекодировки файл /etc/init.d/functions)

RSS-материал