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

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

1) Add test and configuration
2) Fix Bug
3) Add log file in load store unit
4) Fix Bug in environment

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