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

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

modif distexe script

  • Property svn:keywords set to Id
File size: 4.5 KB
RevLine 
[85]1#!/bin/bash
2
[82]3#-----------------------------------------------------------
4# $Id: execute.sh 126 2009-06-17 18:10:41Z 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
[124]90    echo "  * {"$(my_date)"} <${ID}> is ready";
[2]91
92    # infinite loop
93    CPT_OLD=0;
94    CPT=0;
95
96    while test 1; do
97        # Take a number
[112]98        CPT_OLD=${CPT};
[2]99
[112]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};
[2]105
[124]106        # test if this number is valid
[112]107        if test ${CPT} -ge ${#COMMAND[*]}; then
[2]108            CPT=${#COMMAND[*]};
109        fi;
110
111        # test if between the cpt_old and cpt, there are a synchronisation command
112
[112]113#       local -i CPT_SYNC=${CPT}_OLD;
[2]114#
[112]115#       while test ${CPT}_SYNC -lt ${CPT}; do
116#           if test -z "${COMMAND[${CPT}_SYNC]}"; then
[124]117#               echo "  * {"$(my_date)"} <${ID}> synchronisation [${CPT}_SYNC]";
[2]118#           fi;
[112]119#           CPT_SYNC=$((${CPT}_SYNC+1));
[2]120#       done;
121
122        # test if this number is valid
[112]123        if test ${CPT} -eq ${#COMMAND[*]}; then
[2]124            break;
125        fi;
126
127        # Test if command is empty !
[112]128        if test ! -z "${COMMAND[${CPT}]}"; then
[126]129#           echo "  * {"$(my_date)"} <${ID}> execute command [${CPT}] : ${COMMAND[${CPT}]}";
130            echo "  * {"$(my_date)"} <${ID}> command [${CPT}] : execute";
[124]131            local PATH_CURRENT=${PWD};
132            cd    ${PATH_WORK}        &> /dev/null;
[112]133            mkdir "Task_${CPT}"       &> /dev/null;
134            cd    "Task_${CPT}"       &> /dev/null;
[124]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;
[126]145            echo "  * {"$(my_date)"} <${ID}> command [${CPT}] : done";
[2]146        fi;
147    done;
148
[124]149    echo "  * {"$(my_date)"} <${ID}> is done";
[2]150
[112]151    lock   ${LOCK_CPU};
152    CPT=$(cat ${FILE_CPU});    # read  the      index
153    CPT=$((${CPT}-1));
154    echo "${CPT}" > ${FILE_CPU}; # write the next index
155    unlock ${LOCK_CPU};
[2]156   
[112]157    if test ${CPT} -eq 0; then
[124]158        echo "  * {"$(my_date)"} <${ID}> All task is executed on this host";
[112]159        rm ${FILE_CPU};
[2]160    fi;
161}
162
163#-----[ Corps ]---------------------------------------------
[112]164execute ${*};
Note: See TracBrowser for help on using the repository browser.