Script in bash per l'utilizzazione di seti@home , visalizzazione unita e gestione parametri.
#!/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
Beh buona ricerca con SETI@home