Script Bash per Avvio e Visualizzazione dati Seti@home
Da Guide@Debianizzati.Org.
#!/bin/bash
#===============================================
# SETI@home start/status displayer
# ----------------------------------------------
# Released under the GNU General Public License
#===============================================
#---------------------------------------------
#---------------------------------------------
# Parametri da settare prima di avviare lo script
# Path dove e' installato seti
SETI_PATH=/usr/local/setiathome
# pathsenza il nome dell eseguibile
SETI_BIN_PATH=/usr/bin
SETI_BIN_PATH=.
# Opzioni da passare a seti ( es -graphics )
SETI_OPTION="-stop_after_process"
# Priorita' (nice) di seti (da 0 a 19)
SETI_NICE=18
# Non Modificare dopo queste linee
#---------------------------------------------
#---------------------------------------------
#***********
# VARIABILI
#***********
VERSION="2.1"
DATE="14/05/2004"
AUTHOR="Crash-Override alias ^debian^"
EMAIL="neo-zaionnet@email.it"
SETI_EXEC=setiathome
STATE_FILE=$SETI_PATH/state.sah
USER_FILE=$SETI_PATH/user_info.sah
PID_CMD=/sbin/pidof
SETI_PID=`$PID_CMD $SETI_EXEC`
SETI_USER=`ps h -o user -C $SETI_EXEC`
SETI_DATE_FORMAT="%c"
SETI_RED="\033[0;31m"
SETI_BLUE="\033[0;36m"
SETI_NORMAL="\033[0m"
#***********
# FUNZIONI
#***********
set_messages ()
{
if [ -z "$LC_ALL" ]; then
SETI_LANG=$LANG
else
SETI_LANG=`expr substr "$LC_ALL" 1 2`
fi
I=0
MESS_TIME_Y=$((I++))
MESS_TIME_D=$((I++))
MESS_TIME_H=$((I++))
MESS_TIME_M=$((I++))
MESS_FLOAT=$((I++))
MESS_USER_INFO=$((I++))
MESS_N_RESULTS_L=$((I++))
MESS_N_RESULTS_R=$((I++))
MESS_CPU_TIME_L=$((I++))
MESS_CPU_AVERAGE_L=$((I++))
MESS_REGISTER_L=$((I++))
MESS_RESULT_L=$((I++))
MESS_CURRENT=$((I++))
MESS_CURRENT_STOPPED=$((I++))
MESS_CURRENT_CPU_L=$((I++))
MESS_CURRENT_PROGRESS=$((I++))
MESS_CURRENT_STARTED=$((I++))
MESS_CURRENT_DOWNLOAD=$((I++))
MESS_CLIENT=$((I++))
MESS_CLIENT_PID=$((I++))
MESS_CLIENT_START=$((I++))
MESS_CLIENT_TIME=$((I++))
MESS_CLIENT_NICE=$((I++))
MESS_RUN_STATUS=$((I++))
MESS_RUN_STOP_L=$((I++))
MESS_RUN_STOP_R=$((I++))
MESS_RUN_STOP_ERR=$((I++))
MESS_RUN_START=$((I++))
MESS_RUN_START_ERR=$((I++))
MESS_RUN_NOT=$((I++))
MESS_HELP_TITLE=$((I++))
MESS_HELP_AUTHOR=$((I++))
MESS_HELP_VERSION=$((I++))
MESS_HELP_USAGE=$((I++))
MESS_HELP_SUMUP=$((I++))
MESS_HELP_OPTIONS=$((I++))
MESS_HELP_OPT_HELP=$((I++))
MESS_HELP_OPT_VERSION=$((I++))
MESS_HELP_OPT_START=$((I++))
MESS_HELP_OPT_STOP=$((I++))
if [ "$SETI_LANG" = "fr" -o "$SETI_LANG" = "french" -o "$SETI_LANG" = "French" ]; then
MESSAGE[$MESS_TIME_Y]="an "
MESSAGE[$MESS_TIME_D]="j "
MESSAGE[$MESS_TIME_H]="h "
MESSAGE[$MESS_TIME_M]="min "
MESSAGE[$MESS_FLOAT]=","
MESSAGE[$MESS_USER_INFO]="Informazioni Utilizzatore"
MESSAGE[$MESS_N_RESULTS_L]="Numero di unita'calcolate="
MESSAGE[$MESS_N_RESULTS_R]=""
MESSAGE[$MESS_CPU_TIME_L]="Tempo totale macchina = "
MESSAGE[$MESS_CPU_AVERAGE_L]="Tempo per unita' = "
MESSAGE[$MESS_REGISTER_L]="Data di registrazione = "
MESSAGE[$MESS_RESULT_L]="Ultimo risultato inviato = "
MESSAGE[$MESS_CURRENT]="Unita' in corso"
MESSAGE[$MESS_CURRENT_STOPPED]="STOP !"
MESSAGE[$MESS_CURRENT_CPU_L]="Tempo macchina = "
MESSAGE[$MESS_CURRENT_PROGRESS]="Progresso = "
MESSAGE[$MESS_CURRENT_STARTED]="Una nuova unita' sta per essere iniziata"
MESSAGE[$MESS_CURRENT_DOWNLOAD]="Scaricamento di una nuova unita' in corso."
MESSAGE[$MESS_CLIENT]="Processo in corso"
MESSAGE[$MESS_CLIENT_PID]="Identifiant (PID) ="
MESSAGE[$MESS_CLIENT_START]="Arresto ="
MESSAGE[$MESS_CLIENT_TIME]="Tempo macchina ="
MESSAGE[$MESS_CLIENT_NICE]="Priorita' (nice) ="
MESSAGE[$MESS_RUN_STATUS]="Stat d'avanzamento di SETI@home"
MESSAGE[$MESS_RUN_STOP_L]="Processo di SETI@home (PID "
MESSAGE[$MESS_RUN_STOP_R]=") e' stato arrestato."
MESSAGE[$MESS_RUN_STOP_ERR]="SETI@home non puo' essere arrestato per l'utente"
MESSAGE[$MESS_RUN_START]="SETI@home e' fermo"
MESSAGE[$MESS_RUN_START_ERR]="SETI@home"
MESSAGE[$MESS_RUN_NOT]="SETI@home"
MESSAGE[$MESS_HELP_TITLE]=""
MESSAGE[$MESS_HELP_AUTHOR]="Autore"
MESSAGE[$MESS_HELP_VERSION]="Versione"
MESSAGE[$MESS_HELP_SUMUP]="Versione"
MESSAGE[$MESS_HELP_USAGE]="Help : seti OPTIONS"
MESSAGE[$MESS_HELP_OPTIONS]="OPZIONI disponibili :"
MESSAGE[$MESS_HELP_OPT_HELP]=""
MESSAGE[$MESS_HELP_OPT_VERSION]="2.1"
MESSAGE[$MESS_HELP_OPT_START]=""
MESSAGE[$MESS_HELP_OPT_STOP]=""
else
MESSAGE[$MESS_TIME_Y]="yr "
MESSAGE[$MESS_TIME_D]="d "
MESSAGE[$MESS_TIME_H]="h "
MESSAGE[$MESS_TIME_M]="min "
MESSAGE[$MESS_FLOAT]="."
MESSAGE[$MESS_USER_INFO]="User Info"
MESSAGE[$MESS_N_RESULTS_L]="Working Units = "
MESSAGE[$MESS_N_RESULTS_R]=" completed"
MESSAGE[$MESS_CPU_TIME_L]="Total CPU Time = "
MESSAGE[$MESS_CPU_AVERAGE_L]="Average Time/WU = "
MESSAGE[$MESS_REGISTER_L]="Register Time = "
MESSAGE[$MESS_RESULT_L]="Last WU Sent On = "
MESSAGE[$MESS_CURRENT]="Current Working Unit"
MESSAGE[$MESS_CURRENT_STOPPED]="STOPPED !"
MESSAGE[$MESS_CURRENT_CPU_L]="CPU Time = "
MESSAGE[$MESS_CURRENT_PROGRESS]="Progress = "
MESSAGE[$MESS_CURRENT_STARTED]="New Working Unit just started."
MESSAGE[$MESS_CURRENT_DOWNLOAD]="Downloading a new Working Unit..."
MESSAGE[$MESS_CLIENT]="Current Client Process"
MESSAGE[$MESS_CLIENT_PID]="Process ID ="
MESSAGE[$MESS_CLIENT_START]="Starting Time ="
MESSAGE[$MESS_CLIENT_TIME]="CPU Time ="
MESSAGE[$MESS_CLIENT_NICE]="Priority (nice) ="
MESSAGE[$MESS_RUN_STATUS]="SETI@home status"
MESSAGE[$MESS_RUN_STOP_L]="SETI@home process (PID "
MESSAGE[$MESS_RUN_STOP_R]=") stopped."
MESSAGE[$MESS_RUN_STOP_ERR]="SETI@home can only be stopped by user"
MESSAGE[$MESS_RUN_START]="SETI@home started"
MESSAGE[$MESS_RUN_START_ERR]="SETI@home could not be started !"
MESSAGE[$MESS_RUN_NOT]="SETI@home is not running !"
MESSAGE[$MESS_HELP_TITLE]="SETI@home starter and status displayer"
MESSAGE[$MESS_HELP_AUTHOR]="Author"
MESSAGE[$MESS_HELP_VERSION]="Version"
MESSAGE[$MESS_HELP_SUMUP]="Displays information about the SETI@home client."
MESSAGE[$MESS_HELP_USAGE]="Usage : seti OPTIONS"
MESSAGE[$MESS_HELP_OPTIONS]="Available OPTIONS :"
MESSAGE[$MESS_HELP_OPT_HELP]="prints this text"
MESSAGE[$MESS_HELP_OPT_VERSION]="prints the version"
MESSAGE[$MESS_HELP_OPT_START]="starts the SETI@home client"
MESSAGE[$MESS_HELP_OPT_STOP]="sends the TERM signal to the client"
fi
}
format_date ()
{
TIME_DAY=`expr substr "$EXTRACTED_TIME" 1 3`
TIME_MONTH=`expr substr "$EXTRACTED_TIME" 5 3`
TIME_DATE=`expr substr "$EXTRACTED_TIME" 9 2`
TIME_TIME=`expr substr "$EXTRACTED_TIME" 12 8`
TIME_YEAR=`expr substr "$EXTRACTED_TIME" 21 4`
FORMATED_DATE=`date "+$SETI_DATE_FORMAT" -d "${TIME_DATE} ${TIME_MONTH} ${TIME_YEAR} ${TIME_TIME}"`
}
time_int_to_string ()
{
if [ $TIME_INT -gt 31557384 ]; then
TIME_YEAR=$(($TIME_INT / 31557384))
TIME_STRING="${TIME_YEAR}${MESSAGE[$MESS_TIME_Y]}"
else
TIME_STRING=""
fi
if [ $TIME_INT -gt 86400 ]; then
TIME_DAY=$(($TIME_INT % 31557384 / 86400))
TIME_STRING="${TIME_STRING}${TIME_DAY}${MESSAGE[$MESS_TIME_D]}"
fi
TIME_HOUR=$(($TIME_INT % 86400 / 3600))
TIME_MINUTE=$(($TIME_INT % 3600 / 60))
TIME_STRING="${TIME_STRING}${TIME_HOUR}${MESSAGE[$MESS_TIME_H]}${TIME_MINUTE}${MESSAGE[$MESS_TIME_M]}"
}
display_user_info ()
{
if [ -f $USER_FILE ]; then
echo -e "\n ${MESSAGE[$MESS_USER_INFO]}"
N_RESULTS=`grep nresults $USER_FILE | sed "s/nresults=//"`
echo " ${MESSAGE[$MESS_N_RESULTS_L]}${N_RESULTS}${MESSAGE[$MESS_N_RESULTS_R]}"
CPU_TIME=`grep total_cpu $USER_FILE | sed "s/total_cpu=//"`
TIME_INT=`expr substr $CPU_TIME 1 \( index $CPU_TIME . - 1 \)`
time_int_to_string
echo " ${MESSAGE[$MESS_CPU_TIME_L]}${TIME_STRING}"
TIME_INT=$(($TIME_INT / $N_RESULTS))
time_int_to_string
echo " ${MESSAGE[$MESS_CPU_AVERAGE_L]}${TIME_STRING}"
EXTRACTED_TIME=`grep register_time $USER_FILE | sed "s/^register.*(//;s/)//"`
format_date
echo " ${MESSAGE[$MESS_REGISTER_L]}${FORMATED_DATE}"
EXTRACTED_TIME=`grep last_result_time $USER_FILE | sed "s/^last.*(//;s/)//"`
format_date
echo " ${MESSAGE[$MESS_RESULT_L]}${FORMATED_DATE}"
fi
}
display_progress ()
{
if [ "$1" == "0" ]; then
PROG_INFO="${SETI_RED}${MESSAGE[$MESS_CURRENT_STOPPED]}${SETI_NORMAL}"
fi
if [ -s $STATE_FILE ]; then
echo -e "\n ${MESSAGE[$MESS_CURRENT]}"
CPU_TIME=`grep cpu $STATE_FILE | sed "s/cpu=//"`
TIME_INT=`expr substr $CPU_TIME 1 \( index $CPU_TIME . - 1 \)`
time_int_to_string
echo " ${MESSAGE[$MESS_CURRENT_CPU_L]}${TIME_STRING}"
PROGRESS=`grep prog $STATE_FILE | sed "s/prog=//"`
PROG_PERCENT_100=`expr substr $PROGRESS 1 1`
if [ $PROG_PERCENT_100 -eq 1 ]; then
PROG_PERCENT_INT="100"
PROG_PERCENT_FLOAT=""
else
PROG_PERCENT_INT=`expr substr $PROGRESS 3 2`
PROG_PERCENT_FLOAT="${MESSAGE[$MESS_FLOAT]}`expr substr $PROGRESS 5 2`"
fi
echo -e " ${MESSAGE[$MESS_CURRENT_PROGRESS]}${PROG_PERCENT_INT}${PROG_PERCENT_FLOAT}% ${PROG_INFO}"
elif [ -f $STATE_FILE ]; then
echo -e "\n ${MESSAGE[$MESS_CURRENT_STARTED]}"
else
echo -e "\n ${MESSAGE[$MESS_CURRENT_DOWNLOAD]}"
fi
}
display_client_info ()
{
echo -e "\n ${MESSAGE[$MESS_CLIENT]}"
echo " ${MESSAGE[$MESS_CLIENT_PID]} ${SETI_PID}"
CLIENT_START=`ps h -o stime -C $SETI_EXEC`
echo " ${MESSAGE[$MESS_CLIENT_START]} $CLIENT_START"
CLIENT_TIME=`ps h -o time -C $SETI_EXEC`
echo " ${MESSAGE[$MESS_CLIENT_TIME]} $CLIENT_TIME"
CLIENT_NICE=`ps h -o nice -C $SETI_EXEC`
echo " ${MESSAGE[$MESS_CLIENT_NICE]}$CLIENT_NICE"
}
#********
# SCRIPT
#********
set_messages
if [ "$1" == "--help" -o "$1" == "-h" ]; then
echo -e "\n${MESSAGE[$MESS_HELP_TITLE]}"
echo
echo "${MESSAGE[$MESS_HELP_AUTHOR]} : ${AUTHOR} - ${EMAIL}"
echo "${MESSAGE[$MESS_HELP_VERSION]} ${VERSION} - ${DATE}"
echo
echo "${MESSAGE[$MESS_HELP_SUMUP]}"
echo
echo "${MESSAGE[$MESS_HELP_USAGE]}"
echo
echo "${MESSAGE[$MESS_HELP_OPTIONS]}"
echo " --help : ${MESSAGE[$MESS_HELP_OPT_HELP]}"
echo " --version : ${MESSAGE[$MESS_HELP_OPT_VERSION]}"
echo " --start : ${MESSAGE[$MESS_HELP_OPT_START]}"
echo " --stop : ${MESSAGE[$MESS_HELP_OPT_STOP]}"
echo
exit 0
fi
if [ "$1" == "--version" -o "$1" == "-V" ]; then
echo "${MESSAGE[$MESS_HELP_VERSION]} ${VERSION} - ${DATE}"
exit 0
fi
if [ "$SETI_PID" != "" ]; then
if [ "$1" == "--stop" ]; then
if [ "$SETI_USER" == "$USER" ]; then
kill $SETI_PID
echo -e "\n${SETI_RED}${MESSAGE[$MESS_RUN_STOP_L]}${SETI_PID}${MESSAGE[$MESS_RUN_STOP_R]}${SETI_NORMAL}"
else
echo -e "\n${SETI_RED}${MESSAGE[$MESS_RUN_STOP_ERR]} ${SETI_USER} !${SETI_NORMAL}"
fi
else
echo -e "\n${MESSAGE[$MESS_RUN_STATUS]}"
display_client_info
display_user_info
display_progress 1
fi
elif [ "$1" == "--start" ]; then
cd $SETI_PATH
$SETI_BIN_PATH/$SETI_EXEC $SETI_OPTION -nice $SETI_NICE &> /dev/null &
SETI_PID=`$PID_CMD $SETI_EXEC`
if [ "$SETI_PID" != "" ]; then
echo -e "\n${SETI_BLUE}${MESSAGE[$MESS_RUN_START]}${SETI_NORMAL}"
display_client_info
display_user_info
display_progress 1
else
echo -e "\n${SETI_RED}${MESSAGE[$MESS_RUN_START_ERR]}${SETI_NORMAL}\n"
exit 1
fi
else
echo -e "\n${SETI_RED}${MESSAGE[$MESS_RUN_NOT]}${SETI_NORMAL}"
display_user_info
display_progress 0
fi
echo
bhe buona ricerca con SETI@home
Autore: debian

