source: trunk/IPs/systemC/processor/Morpheo/Script/execute.sh @ 136

Last change on this file since 136 was 136, checked in by rosiere, 15 years ago

1) Add new algo in ifetch queue
2) Add Cancel bit
3) new config

  • Property svn:keywords set to Id
File size: 4.8 KB
RevLine 
[85]1#!/bin/bash
2
[82]3#-----------------------------------------------------------
4# $Id: execute.sh 136 2009-10-20 18:52:15Z rosiere $
5#-----------------------------------------------------------
[2]6
[112]7#-----[ global variable ]-----------------------------------
[78]8
[2]9#-----[ lock ]----------------------------------------------
10function lock ()
11{
[112]12    lockfile -1 ${1};
[2]13}
14
15#-----[ unlock ]--------------------------------------------
16function unlock ()
17{
[112]18    rm -f ${1};
[2]19}
20
[112]21#-----[ my_date ]-------------------------------------------
22function my_date ()
[2]23{
[112]24    date +"%F %T";
25}
[2]26
[112]27#-----[ execute_usage ]-------------------------------------
28function execute_usage ()
29{
[124]30    echo "Usage     : ${0} path_work file_cmd file_cpt file_cpu id";
[112]31    echo "Arguments : ";
[124]32    echo " * path_work  : directory to execute command";
[112]33    echo " * file_cmd   : list of command";
34    echo " * file_cpt   : file with the index of next command to execute";
35    echo " * file_cpu   : tmp file to stock the current index";
[124]36    echo " * id         : identification";
[112]37    exit;
38}
39
40#-----[ execute_test_usage ]--------------------------------
41function execute_test_usage ()
42{
[124]43    if test ${#} -ne 5; then
[112]44        execute_usage;
[2]45    fi;
46
[112]47    if test ! -d ${1}; then
48        echo "Directory ${1} is invalid";
49    fi;
50}
51
52#-----[ execute ]-------------------------------------------
53function execute ()
54{
55    # test_usage
56    execute_test_usage ${*};
57
58    local -a COMMAND;
59    local -i CPT_OLD;
60    local -i CPT;
[124]61    local    PATH_WORK=${1};
[112]62    local    FILE_CMD=${2};
63    local    FILE_CPT=${3};
64    local    FILE_CPU=${4};
[124]65    local    ID=${5};
66    local    LOCK_CPT="${PATH_WORK}/.lock-cpt";
67    local    LOCK_CPU="${PATH_WORK}/.lock-cpu";
68    local    OUTPUT_FILE_INFO="distexe.info";
69    local    OUTPUT_FILE_CMD="distexe.command";
70    local    OUTPUT_FILE_OUT="distexe.output";
[112]71
[124]72#   echo "  * {"$(my_date)"} <${ID}> pid is $$";
[112]73
74    # Init CPT if this thread is the first
75    lock   ${LOCK_CPT};
76    if test ! -s ${FILE_CPT}; then
[124]77        echo "  * {"$(my_date)"} <${ID}> create counter file ${FILE_CPT}";
[112]78        echo "0" > ${FILE_CPT};
79    fi;
80    unlock ${LOCK_CPT};
81
82    # read, line by line, the command file and write in array
[2]83    CPT=0;
84
85    while read line; do
[112]86        COMMAND[${CPT}]="${line}";
87        CPT=$((${CPT}+1));
88    done < ${FILE_CMD};
[2]89
[127]90    local -i NB_DIGIT=0;
[128]91    local -i NB_COMMAND=${#COMMAND[*]};
92    local -i x=${NB_COMMAND};
[127]93
94    while test ${x} -ne 0; do
95        NB_DIGIT=$((${NB_DIGIT} + 1));
96        x=$((${x} / 10));
97    done;
98
[124]99    echo "  * {"$(my_date)"} <${ID}> is ready";
[2]100
101    # infinite loop
102    CPT_OLD=0;
103    CPT=0;
104
105    while test 1; do
106        # Take a number
[112]107        CPT_OLD=${CPT};
[2]108
[112]109        # Read the index, and increase
110        lock   ${LOCK_CPT};
111        CPT=$(cat ${FILE_CPT});
112        echo "$((${CPT}+1))" > ${FILE_CPT};
113        unlock ${LOCK_CPT};
[2]114
[124]115        # test if this number is valid
[128]116        if test ${CPT} -ge ${NB_COMMAND}; then
117            CPT=${NB_COMMAND};
[2]118        fi;
119
120        # test if between the cpt_old and cpt, there are a synchronisation command
121
[112]122#       local -i CPT_SYNC=${CPT}_OLD;
[2]123#
[112]124#       while test ${CPT}_SYNC -lt ${CPT}; do
125#           if test -z "${COMMAND[${CPT}_SYNC]}"; then
[124]126#               echo "  * {"$(my_date)"} <${ID}> synchronisation [${CPT}_SYNC]";
[2]127#           fi;
[112]128#           CPT_SYNC=$((${CPT}_SYNC+1));
[2]129#       done;
130
131        # test if this number is valid
[128]132        if test ${CPT} -eq ${NB_COMMAND}; then
[2]133            break;
134        fi;
135
136        # Test if command is empty !
[112]137        if test ! -z "${COMMAND[${CPT}]}"; then
[127]138            local NUM=$(printf %.${NB_DIGIT}d ${CPT});
[136]139            local MAX=$((${NB_COMMAND}-1));
[127]140
141#           echo "  * {"$(my_date)"} <${ID}> execute command [${NUM}] : ${COMMAND[${CPT}]}";
[136]142            echo "  * {"$(my_date)"} <${ID}> command [${NUM}/${MAX}] : execute";
[124]143            local PATH_CURRENT=${PWD};
[127]144
[124]145            cd    ${PATH_WORK}        &> /dev/null;
[127]146            mkdir "Task_${NUM}"       &> /dev/null;
147            cd    "Task_${NUM}"       &> /dev/null;
[124]148            echo "id   : ${ID}"        >  ${OUTPUT_FILE_INFO};
149            echo "host : ${HOSTNAME}" >>  ${OUTPUT_FILE_INFO};
150            echo "pid  : $$"          >>  ${OUTPUT_FILE_INFO};
151            echo "date : "$(my_date)  >>  ${OUTPUT_FILE_INFO};
152            echo "#!/bin/bash"         >  ${OUTPUT_FILE_CMD};
153            echo 'source ${HOME}/.bashrc;' >>  ${OUTPUT_FILE_CMD};
154            echo "${COMMAND[${CPT}]}" >>  ${OUTPUT_FILE_CMD};
155            chmod +x                      ${OUTPUT_FILE_CMD};
156            ./${OUTPUT_FILE_CMD}      &${OUTPUT_FILE_OUT};
157            cd    ${PATH_CURRENT}     &> /dev/null;
[136]158            echo "  * {"$(my_date)"} <${ID}> command [${NUM}/${MAX}] : done";
[2]159        fi;
160    done;
161
[124]162    echo "  * {"$(my_date)"} <${ID}> is done";
[2]163
[112]164    lock   ${LOCK_CPU};
165    CPT=$(cat ${FILE_CPU});    # read  the      index
166    CPT=$((${CPT}-1));
167    echo "${CPT}" > ${FILE_CPU}; # write the next index
168    unlock ${LOCK_CPU};
[2]169   
[112]170    if test ${CPT} -eq 0; then
[124]171        echo "  * {"$(my_date)"} <${ID}> All task is executed on this host";
[112]172        rm ${FILE_CPU};
[2]173    fi;
174}
175
176#-----[ Corps ]---------------------------------------------
[112]177execute ${*};
Note: See TracBrowser for help on using the repository browser.