Added daemon mode.

This commit is contained in:
Louwrentius 2010-04-15 21:46:27 +00:00
parent 7c9da647b5
commit 13e6b77c65

82
ppss
View File

@ -67,11 +67,16 @@ ARCH="`uname`"
PPSS_HOME_DIR="ppss-home" PPSS_HOME_DIR="ppss-home"
PID="$$" PID="$$"
if [ -z "$INPUT_LOCK" ]
then
INPUT_LOCK="INPUT_LOCK"
fi
GLOBAL_LOCK="$PPSS_DIR/PPSS-GLOBAL-LOCK-$PID" # Global lock file used by local PPSS instance. GLOBAL_LOCK="$PPSS_DIR/PPSS-GLOBAL-LOCK-$PID" # Global lock file used by local PPSS instance.
PAUSE_SIGNAL="$PPSS_HOME_DIR/$PPSS_DIR/pause_signal" # Pause processing if this file is present. PAUSE_SIGNAL="$PPSS_HOME_DIR/$PPSS_DIR/pause_signal" # Pause processing if this file is present.
PAUSE_DELAY="60" # Polling every 1 minutes by default. PAUSE_DELAY="60" # Polling every 1 minutes by default.
STOP_SIGNAL="$PPSS_HOME_DIR/$PPSS_DIR/stop_signal" # Stop processing if this file is present. STOP_SIGNAL="$PPSS_HOME_DIR/$PPSS_DIR/stop_signal" # Stop processing if this file is present.
ARRAY_POINTER_FILE="$PPSS_DIR/ppss-array-pointer-$PID" # Pointer for keeping track of processed items. ARRAY_POINTER_FILE="$PPSS_DIR/ppss-array-pointer-$PID" # Pointer for keeping track of processed items.
ARRAY=""
JOB_LOG_DIR="$PPSS_DIR/job_log" # Directory containing log files of processed items. JOB_LOG_DIR="$PPSS_DIR/job_log" # Directory containing log files of processed items.
LOGFILE="$PPSS_DIR/ppss-log-$PID.txt" # General PPSS log file. Contains lots of info. LOGFILE="$PPSS_DIR/ppss-log-$PID.txt" # General PPSS log file. Contains lots of info.
QUIET="0" QUIET="0"
@ -88,6 +93,7 @@ KILL_KEY="$RANDOM$RANDOM$RANDOM" # This is a signal to st
RECURSION="1" # all running processes. RECURSION="1" # all running processes.
START_PPSS=`get_time_in_seconds` START_PPSS=`get_time_in_seconds`
STOP_PPSS="" STOP_PPSS=""
SIZE_OF_ARRAY=""
SSH_SERVER="" # Remote server or 'master'. SSH_SERVER="" # Remote server or 'master'.
SSH_KEY="" # SSH key for ssh account. SSH_KEY="" # SSH key for ssh account.
@ -123,7 +129,7 @@ showusage_short () {
echo echo
echo "usage: $0 [ -d <sourcedir> | -f <sourcefile> ] [ -c '<command> \"\$ITEM\"' ]" echo "usage: $0 [ -d <sourcedir> | -f <sourcefile> ] [ -c '<command> \"\$ITEM\"' ]"
echo " [ -C <configfile> ] [ -j ] [ -l <logfile> ] [ -p <# jobs> ]" echo " [ -C <configfile> ] [ -j ] [ -l <logfile> ] [ -p <# jobs> ]"
echo " [ -q ] [ -D <delay> ] [ -h ] [ --help ] [ -r ] " echo " [ -q ] [ -D <delay> ] [ -h ] [ --help ] [ -r ] [ --daemon ]"
echo echo
echo "Examples:" echo "Examples:"
echo " $0 -d /dir/with/some/files -c 'gzip '" echo " $0 -d /dir/with/some/files -c 'gzip '"
@ -173,6 +179,9 @@ showusage_normal () {
echo -e "--delay | -D Adds an initial random delay to the start of all parallel jobs to spread" 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 is only used at the start of all 'threads'."
echo 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
echo -e "--no-recursion|-r By default, recursion of directories is enabled when the -d option is " 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 " 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 -e " Only files within the specified directory will be processed."
@ -247,6 +256,9 @@ showusage_long () {
echo -e "--delay | -D Adds an initial random delay to the start of all parallel jobs to spread" 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 is only used at the start of all 'threads'."
echo 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
echo -e "--no-recursion|-r By default, recursion of directories is enabled when the -d option is " 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 " 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 -e " Only files within the specified directory will be processed."
@ -517,6 +529,13 @@ do
add_var_to_config MAX_DELAY "$MAX_DELAY" add_var_to_config MAX_DELAY "$MAX_DELAY"
shift 2 shift 2
;; ;;
--daemon)
DAEMON="1"
QUIET="1"
add_var_to_config DAEMON "$DAEMON"
add_var_to_config QUIET "$QUIET"
shift 1
;;
--awskeypair|-P) --awskeypair|-P)
AWS_KEYPAIR="$2" AWS_KEYPAIR="$2"
add_var_to_config AWS_KEYPAIR "$AWS_KEYPAIR" add_var_to_config AWS_KEYPAIR "$AWS_KEYPAIR"
@ -1418,8 +1437,42 @@ lock_item () {
fi fi
} }
get_input_lock () {
while true
do
exec_cmd "mkdir -p $INPUT_LOCK"
if [ "$?" == "0" ]
then
log DEBUG "Input lock is obtained..."
break
else
log DEBUG "Input lock is present...sleeping.."
sleep 5
fi
done
}
release_input_lock () {
exec_cmd "rm -rf $INPUT_LOCK"
if [ "$?" == "0" ]
then
log DEBUG "Input lock was released..."
return 0
else
log ERROR "Input lock was already gone...this should never happen..."
return 1
fi
}
get_all_items () { get_all_items () {
if [ "$DAEMON" == "1" ]
then
get_input_lock
fi
count=0 count=0
if [ -z "$INPUT_FILE" ] if [ -z "$INPUT_FILE" ]
@ -1496,6 +1549,11 @@ get_all_items () {
fi fi
if [ "$DAEMON" == "1" ]
then
release_input_lock
fi
SIZE_OF_ARRAY="${#ARRAY[@]}" SIZE_OF_ARRAY="${#ARRAY[@]}"
if [ "$SIZE_OF_ARRAY" -le "0" ] if [ "$SIZE_OF_ARRAY" -le "0" ]
then then
@ -1624,6 +1682,10 @@ elapsed () {
commando () { commando () {
log DEBUG "-------------------------------------" log DEBUG "-------------------------------------"
if [ "$DAEMON" == "1" ]
then
log INFO "Processing item: $1 in DAEMON MODE"
fi
# #
# This function will start a chain reaction of events. # This function will start a chain reaction of events.
@ -1882,7 +1944,20 @@ listen_for_job () {
((DIED++)) ((DIED++))
if [ "$DIED" -ge "$MAX_NO_OF_RUNNING_JOBS" ] if [ "$DIED" -ge "$MAX_NO_OF_RUNNING_JOBS" ]
then then
break if [ "$DAEMON" == "1" ]
then
#
# In daemon mode, start all over again.
#
DIED=0
export ARRAY=""
get_all_items
log DEBUG "Found $SIZE_OF_ARRAY items."
start_all_workers
sleep 10
else
break
fi
else else
RES=$((MAX_NO_OF_RUNNING_JOBS-DIED)) RES=$((MAX_NO_OF_RUNNING_JOBS-DIED))
if [ "$RES" == "1" ] && [ "$QUIET" == "0" ] if [ "$RES" == "1" ] && [ "$QUIET" == "0" ]
@ -1907,8 +1982,6 @@ listen_for_job () {
# process as defined by $PID. All processes that have ever been # process as defined by $PID. All processes that have ever been
# spawned, although disowned or backgrounded will be killed... # spawned, although disowned or backgrounded will be killed...
# #
# *** THIS MAY BE DEAD CODE ***
#
PROCLIST=`ps a -o pid,pgid,ppid,command | grep [0-9] | grep $PID | grep -v -i grep` PROCLIST=`ps a -o pid,pgid,ppid,command | grep [0-9] | grep $PID | grep -v -i grep`
#echo "$PROCLIST" > proclist.txt #echo "$PROCLIST" > proclist.txt
oldIFS=$IFS # save the field separator oldIFS=$IFS # save the field separator
@ -1965,6 +2038,7 @@ listen_for_job () {
fi fi
done done
if [ ! -z "$SSH_MASTER_PID" ] if [ ! -z "$SSH_MASTER_PID" ]
then then
log DEBUG "SSH master PID is $SSH_MASTER_PID" log DEBUG "SSH master PID is $SSH_MASTER_PID"