Find file
Fetching contributors…
Cannot retrieve contributors at this time
executable file 138 lines (110 sloc) 4.02 KB
#!/bin/sh
#---------------------------------*- sh -*-------------------------------------
# ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration |
# \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd.
# \\/ M anipulation |
#------------------------------------------------------------------------------
# License
# This file is part of OpenFOAM.
#
# OpenFOAM is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
#
# Script
# foamDistccd
#
# Description
# Script to control distccd daemons. (distcc/distccd is a distributed
# C/C++ compilation frontend). Distccd daemons need to be running
# on all platforms one wants to build on. The platforms are specified
# in the DISTCC_HOSTS environment variable.
#
#------------------------------------------------------------------------------
printUsage()
{
echo "Usage : `basename $0` start|stop|list"
echo ""
}
RSH='ssh'
if [ ! "$DISTCC_HOSTS" ]; then
echo "`basename $0`: variable DISTCC_HOSTS not set."
echo "`basename $0`: please set DISTCC_HOSTS to the list of hosts to use."
echo "`basename $0`: the format is host1:port host2:port host3:port etc."
echo ""
exit 1
fi
if [ $# -ne 1 ]; then
printUsage
exit 1
fi
if [ "$1" = 'start' ]; then
grep -v '^#' /etc/hosts | awk '{print $1, $2 " "}' > ~/filteredHosts.txt
allowIPS=''
for host in $DISTCC_HOSTS
do
machine=`echo "$host" | awk -F: '{print $1}'`
iptest=`echo "$machine" | sed -e 's/[0-9.]//g'`
if [ ! "$iptest" ]; then
# address only contained 0-9 and '.'. Probably ip address.
ip=$machine
else
# address probably not ip address. Try searching /etc/hosts
ip=`egrep " $machine " ~/filteredHosts.txt | awk '{print $1}'`
fi
if [ ! "$ip" ]; then
echo "$0 : host specifier $host either is not an ip address or cannot be found in /etc/hosts."
echo "$0 : Exiting."
exit 1
fi
allowIPS="$allowIPS --allow $ip"
done
echo "allowIPS=$allowIPS"
for host in $DISTCC_HOSTS
do
echo ""
echo "Trying to start distccd on host $host ..."
machine=`echo "$host" | awk -F: '{print $1}'`
port=`echo "$host" | awk -F: '{print $2}'`
if [ "$machine" -a "$port" ]; then
#echo "Machine:$machine port:$port"
echo "distccd --daemon $allowIPS --port $port"' --jobs `egrep "^processor" /proc/cpuinfo | wc -l`'
$RSH $machine "distccd --verbose --daemon $allowIPS --port $port"' --jobs `egrep "^processor" /proc/cpuinfo | wc -l`'
else
echo "$0 : host specifier $host not in correct form machine:port."
echo "$0 : Exiting."
exit 1
fi
done
elif [ "$1" = 'stop' ]; then
for host in $DISTCC_HOSTS
do
echo ""
echo "Trying to stop all distccd on host $host ..."
machine=`echo "$host" | awk -F: '{print $1}'`
$RSH $machine killall distccd
done
elif [ "$1" = 'list' ]; then
for host in $DISTCC_HOSTS
do
echo ""
echo "Trying to find process distccd on host $host ..."
machine=`echo "$host" | awk -F: '{print $1}'`
$RSH $machine "ps -ef | grep distccd | grep -v grep"
done
else
printUsage
exit 1
fi
#------------------------------------------------------------------------------