backup
This commit is contained in:
parent
2c42f7568e
commit
654b52d91f
116
ppss
116
ppss
@ -26,7 +26,7 @@
|
||||
trap 'kill_process' SIGINT
|
||||
|
||||
SCRIPT_NAME="Distributed Parallel Processing Shell Script"
|
||||
SCRIPT_VERSION="2.81"
|
||||
SCRIPT_VERSION="2.83"
|
||||
|
||||
#
|
||||
# The first argument to this script can be a mode.
|
||||
@ -89,6 +89,7 @@ ACTIVE_WORKERS="0"
|
||||
DAEMON_POLLING_INTERVAL="10"
|
||||
STAT=""
|
||||
DAEMON_FILE_AGE="4"
|
||||
ENABLE_INPUT_LOCK="0"
|
||||
|
||||
SSH_SERVER="" # Remote server or 'master'.
|
||||
SSH_KEY="" # SSH key for ssh account.
|
||||
@ -118,6 +119,7 @@ ITEM_ESCAPED=""
|
||||
DISABLE_SKIPPING=0
|
||||
NODE_STATUS="$PPSS_DIR/status.txt"
|
||||
DAEMON=0
|
||||
EMAIL=""
|
||||
|
||||
REGISTER="" # For STACK
|
||||
STACK=""
|
||||
@ -136,6 +138,7 @@ showusage_short () {
|
||||
echo " $0 -d /dir/with/some/files -c 'gzip '"
|
||||
echo " $0 -d /dir/with/some/files -c 'cp \"\$ITEM\" /tmp' -p 2"
|
||||
echo " $0 -f <file> -c 'wget -q -P /destination/directory \"\$ITEM\"' -p 10"
|
||||
echo
|
||||
}
|
||||
|
||||
showusage_normal () {
|
||||
@ -178,15 +181,19 @@ showusage_normal () {
|
||||
echo -e "--quiet | -q Shows no output except for a progress indication using percents."
|
||||
echo
|
||||
echo -e "--delay | -D Adds an initial random delay to the start of all parallel jobs to spread"
|
||||
echo -e " the load. The delay is only used at the start of all 'threads'."
|
||||
echo -e " the load. The delay (seconds) is only used at the start of all 'threads'."
|
||||
echo
|
||||
echo -e "--daemon Do not exit after items are professed, but keep looking for new items"
|
||||
echo -e " and process them. Read the manual how to use this!"
|
||||
echo -e "--daemon Daemon mode. Do not exit after items are professed, but keep looking "
|
||||
echo -e " for new items and process them. Read the manual how to use this!"
|
||||
echo -e " See --help for important additional options regarding daemon mode."
|
||||
echo
|
||||
echo -e "--no-recursion|-r By default, recursion of directories is enabled when the -d option is "
|
||||
echo -e " used. If this is not prefered, this can be disabled with this option "
|
||||
echo -e " Only files within the specified directory will be processed."
|
||||
echo
|
||||
echo -e "--email | -e PPSS sends an e-mail if PPSS has finished. It is also used if processing"
|
||||
echo -e " of an item has failed (configurable, see -h). "
|
||||
echo
|
||||
echo -e "--help Extended help, including options for distributed mode and Amazon EC2."
|
||||
echo
|
||||
echo -e "Example: encoding some wav files to mp3 using lame:"
|
||||
@ -254,6 +261,24 @@ showusage_long () {
|
||||
echo -e "--daemon Do not exit after items are professed, but keep looking for new items"
|
||||
echo -e " and process them. Read the manual how to use this!"
|
||||
echo
|
||||
echo -e "--interval Specifies the polling interval when running in daemon mode. Polls every"
|
||||
echo -e " x seconds for new items to process."
|
||||
echo
|
||||
echo -e "--file-age When not using inotify, specify how many seconds must have passed before"
|
||||
echo -e " a file may be processed to prevent files being processed while being "
|
||||
echo -e " written to."
|
||||
echo
|
||||
echo -e "--disable-inotify If for some reason, inotify must not be used, use this option to disable"
|
||||
echo -e " usage of inotify. Regular polling will be used."
|
||||
echo
|
||||
echo -e "--enable-input-lock When PPSS is run in daemon mode, create a directory INPUT_LOCK to"
|
||||
echo -e " signal that items are processed and may not be touched by PPSS."
|
||||
echo -e " Once this directory is removed, PPSS will start processing items."
|
||||
echo
|
||||
echo -e "--no-recursion|-r By default, recursion of directories is enabled when the -d option is "
|
||||
echo -e " used. If this is not prefered, this can be disabled with this option "
|
||||
echo -e " Only files within the specified directory will be processed."
|
||||
echo
|
||||
echo -e "--no-recursion|-r By default, recursion of directories is enabled when the -d option is "
|
||||
echo -e " used. If this is not prefered, this can be disabled with this option."
|
||||
echo -e " Only files within the specified directory will be processed."
|
||||
@ -449,7 +474,6 @@ is_var_empty () {
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
detect_inotify () {
|
||||
|
||||
if [ -e /usr/bin/inotifywait ] && [ ! "$INOTIFY" = "0" ]
|
||||
@ -546,6 +570,10 @@ process_arguments () {
|
||||
INOTIFY=0
|
||||
add_var_to_config INOTIFY "$INOTIFY"
|
||||
shift 1 ;;
|
||||
--enable-input-lock)
|
||||
ENABLE_INPUT_LOCK=1
|
||||
add_var_to_config ENABLE_INPUT_LOCK "$ENABLE_INPUT_LOCK"
|
||||
shift 1 ;;
|
||||
--daemon)
|
||||
DAEMON="1"
|
||||
QUIET="1"
|
||||
@ -563,6 +591,11 @@ process_arguments () {
|
||||
is_var_empty "$2"
|
||||
add_var_to_config DAEMON_FILE_AGE "$DAEMON_FILE_AGE"
|
||||
shift 2 ;;
|
||||
--email|-e)
|
||||
is_var_empty "$2"
|
||||
EMAIL="$2"
|
||||
add_var_to_config EMAIL "$EMAIL"
|
||||
shift 2 ;;
|
||||
--awskeypair|-P)
|
||||
AWS_KEYPAIR="$2"
|
||||
add_var_to_config AWS_KEYPAIR "$AWS_KEYPAIR"
|
||||
@ -1435,13 +1468,9 @@ random_delay () {
|
||||
fi
|
||||
|
||||
NUMBER=$RANDOM
|
||||
|
||||
let "NUMBER %= $ARGS"
|
||||
if [ "$ARCH" == "SunOS" ]
|
||||
then
|
||||
sleep "$NUMBER"
|
||||
else
|
||||
sleep "0.$NUMBER"
|
||||
fi
|
||||
sleep "$NUMBER"
|
||||
}
|
||||
|
||||
escape_item () {
|
||||
@ -1709,7 +1738,7 @@ remove_processed_items_from_input_file () {
|
||||
|
||||
get_all_items () {
|
||||
|
||||
if [ "$DAEMON" == "1" ]
|
||||
if [ "$DAEMON" == "1" ] && [ "$INOTIFY" = "0" ] && [ "$ENABLE_INPUT_LOCK" = "1" ]
|
||||
then
|
||||
GLOBAL_COUNTER=1
|
||||
get_input_lock
|
||||
@ -1900,7 +1929,24 @@ elapsed () {
|
||||
MINS="$(expr $(expr $REMAINDER - $SECS) / 60)"
|
||||
|
||||
RES=$(printf "Total processing time (hh:mm:ss): %02d:%02d:%02d" $HOURS $MINS $SECS)
|
||||
log DSPLY "$RES"
|
||||
echo "$RES"
|
||||
}
|
||||
|
||||
mail_on_error () {
|
||||
|
||||
ITEM="$1"
|
||||
LOGFILE="$2"
|
||||
|
||||
if [ "$MAIL_ON_ERROR" = "1" ]
|
||||
then
|
||||
cat "$LOGFILE" | mail -s "$HOSTNAME - PPSS: procesing failed for item." "$EMAIL"
|
||||
if [ "$?" = "0" ]
|
||||
then
|
||||
log DEBUG "Error mail sent."
|
||||
else
|
||||
log ERROR "Sending of error email failed."
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
commando () {
|
||||
@ -2073,6 +2119,7 @@ commando () {
|
||||
# Some error logging. Success or fail.
|
||||
if [ ! "$ERROR" == "0" ]
|
||||
then
|
||||
mail_on_error "$ITEM" "$ITEM_LOG_FILE"
|
||||
echo -e "Status:\t\tFAILURE" >> "$ITEM_LOG_FILE"
|
||||
else
|
||||
echo -e "Status:\t\tSUCCESS" >> "$ITEM_LOG_FILE"
|
||||
@ -2182,7 +2229,7 @@ run_command () {
|
||||
INPUT="$REGISTER"
|
||||
fi
|
||||
|
||||
log DEBUG "Now processing $INPUT"
|
||||
log INFO "Now processing $INPUT"
|
||||
|
||||
if [ ! -d "$INPUT" ] && [ ! -z "$INPUT" ]
|
||||
then
|
||||
@ -2217,6 +2264,31 @@ display_jobs_remaining () {
|
||||
fi
|
||||
}
|
||||
|
||||
show_eta () {
|
||||
|
||||
CURRENT_PROCESSED=$((GLOBAL_COUNTER-MAX_NO_OF_RUNNING_JOBS))
|
||||
TOTAL="$SIZE_OF_INPUT"
|
||||
START_TIME=$START_PPSS
|
||||
NOW=`get_time_in_seconds`
|
||||
|
||||
if [ "$CURRENT_PROCESSED" -le "0" ]
|
||||
then
|
||||
return 0
|
||||
else
|
||||
TIME_PER_ITEM=$(( (NOW-START_TIME)/CURRENT_PROCESSED ))
|
||||
TOTAL_TIME=$(( ($TIME_PER_ITEM * SIZE_OF_INPUT) + $TIME_PER_ITEM ))
|
||||
TOTAL_TIME_IN_SECONDS=$((START_TIME+TOTAL_TIME))
|
||||
if [ "$ARCH" = "Darwin" ]
|
||||
then
|
||||
DATE=`date -r $TOTAL_TIME_IN_SECONDS`
|
||||
else
|
||||
DATE=`date -d @$TOTAL_TIME_IN_SECONDS`
|
||||
fi
|
||||
echo
|
||||
log DSPLY "ETA: $DATE"
|
||||
fi
|
||||
}
|
||||
|
||||
display_progress () {
|
||||
|
||||
if [ "$DAEMON" = "0" ]
|
||||
@ -2228,6 +2300,7 @@ display_progress () {
|
||||
if [ "$QUIET" == "0" ]
|
||||
then
|
||||
log PRCNT "Currently $PERCENT percent complete. Processed $GLOBAL_COUNTER of $SIZE_OF_INPUT items."
|
||||
show_eta
|
||||
elif [ "$DAEMON" == "0" ]
|
||||
then
|
||||
echo -en "\r$PERCENT%"
|
||||
@ -2251,7 +2324,6 @@ terminate_listener () {
|
||||
|
||||
if [ ! -z "$SSH_MASTER_PID" ]
|
||||
then
|
||||
log DEBUG "SSH master PID is $SSH_MASTER_PID"
|
||||
kill "$SSH_MASTER_PID"
|
||||
else
|
||||
log DEBUG "SSH master PID is empty."
|
||||
@ -2275,6 +2347,16 @@ terminate_listener () {
|
||||
then
|
||||
echo
|
||||
fi
|
||||
|
||||
if [ ! -z "$EMAIL" ]
|
||||
then
|
||||
echo "PPSS job finished." | mail -s "$HOSTNAME - PPSS has finished." "$EMAIL"
|
||||
if [ ! "$?" = "0" ]
|
||||
then
|
||||
log ERROR "Sending os status mail failed."
|
||||
fi
|
||||
fi
|
||||
|
||||
cleanup
|
||||
}
|
||||
|
||||
@ -2422,7 +2504,7 @@ listen_for_job () {
|
||||
|
||||
while read event <& 42
|
||||
do
|
||||
log DEBUG "Current active workers is $ACTIVE_WORKERS"
|
||||
log INFO "Current active workers is $ACTIVE_WORKERS"
|
||||
|
||||
if [ "$event" = "$START_KEY" ]
|
||||
then
|
||||
@ -2455,7 +2537,7 @@ listen_for_job () {
|
||||
infanticide
|
||||
break
|
||||
else
|
||||
log DEBUG "Event $event is an item!"
|
||||
log DEBUG "Event is an item."
|
||||
stack_push "$event"
|
||||
run_command
|
||||
fi
|
||||
|
@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
DEBUG="$1"
|
||||
VERSION="2.81"
|
||||
VERSION="2.82"
|
||||
TMP_DIR="/tmp/ppss"
|
||||
PPSS=./ppss
|
||||
PPSS_DIR=ppss_dir
|
||||
|
Loading…
Reference in New Issue
Block a user