#!/bin/sh declare -a COMMAND; declare -i CPT_OLD; declare -i CPT; declare FILE_CMD=; declare FILE_CPT=; declare FILE_CPU=; declare LOCK_CPT="$HOME/.lock-cpt"; declare LOCK_CPU="$HOME/.lock-cpu"; #-----[ lock ]---------------------------------------------- function lock () { lockfile -1 $1; } #-----[ unlock ]-------------------------------------------- function unlock () { rm -f $1; } #-----[ main ]---------------------------------------------- function main () { # no test, because the script execute_n have make all test FILE_CMD=$1; FILE_CPT=$2; FILE_CPU=$3; lock $LOCK_CPT; if test ! -s $FILE_CPT; then echo "0" > $FILE_CPT; fi; unlock $LOCK_CPT; # lit les fichiers ligne par ligne et le place dans un tableau CPT=0; while read line; do COMMAND[$CPT]="$line"; CPT=$(($CPT+1)); done < $1; echo " * <$$> {"`date +"%F %T"`"} is ready"; # infinite loop CPT_OLD=0; CPT=0; while test 1; do # Take a number CPT_OLD=$CPT; lock $LOCK_CPT; CPT=`cat $FILE_CPT`; # read the index echo "$(($CPT+1))" > $FILE_CPT; # write the next index unlock $LOCK_CPT; # test if this number is valid if test $CPT -ge ${#COMMAND[*]}; then CPT=${#COMMAND[*]}; fi; # test if between the cpt_old and cpt, there are a synchronisation command # local -i CPT_SYNC=$CPT_OLD; # # while test $CPT_SYNC -lt $CPT; do # if test -z "${COMMAND[$CPT_SYNC]}"; then # echo " * <$$> {"`date +"%F %T"`"} synchronisation [$CPT_SYNC]"; # fi; # CPT_SYNC=$(($CPT_SYNC+1)); # done; # test if this number is valid if test $CPT -eq ${#COMMAND[*]}; then break; fi; # Test if command is empty ! if test ! -z "${COMMAND[$CPT]}"; then local CUR_DIR=$PWD; mkdir "Task_$CPT" &> /dev/null; cd "Task_$CPT" &> /dev/null; echo " * <$$> {"`date +"%F %T"`"} execute command [$CPT] : ${COMMAND[$CPT]}"; echo "${COMMAND[$CPT]}" > "command"; chmod +x "command"; eval "${COMMAND[$CPT]}" &> "output"; cd $CUR_DIR &> /dev/null; fi; done; echo " * <$$> {"`date +"%F %T"`"} is done"; lock $LOCK_CPU; CPT=`cat $FILE_CPU`; # read the index CPT=$(($CPT-1)); echo "$CPT" > $FILE_CPU; # write the next index unlock $LOCK_CPU; if test $CPT -eq 0; then echo " * <$$> {"`date +"%F %T"`"} All task is executed"; rm $FILE_CPU; fi; } #-----[ Corps ]--------------------------------------------- main $*;