#!/bin/bash # --- SDE-COPYRIGHT-NOTE-BEGIN --- # This copyright note is auto-generated by ./scripts/Create-CopyPatch. # # Filename: scripts/Build-Job # Copyright (C) 2006 The OpenSDE Project # Copyright (C) 2004 - 2006 The T2 SDE Project # Copyright (C) 1998 - 2003 Clifford Wolf # # More information can be found in the files COPYING and README. # # This program 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; version 2 of the License. A copy of the # GNU General Public License can be found in the file COPYING. # --- SDE-COPYRIGHT-NOTE-END --- config=default xdaemon=0 daemon=0 while [ "$1" ] ; do case "$1" in -daemon) daemon=1 ; shift ;; -xdaemon) xdaemon=1 ; shift ;; -cfg) config=$2 ; shift ; shift ;; -*) echo "Usage: $0 [ -cfg config ] { -daemon | job(s) }" exit 1 ;; *) break ;; esac done . lib/parse-config qdir="build/$SDECFG_ID/TOOLCHAIN/queue" build_logs="build/$SDECFG_ID/TOOLCHAIN/logs" mkdir -p "${build_logs}" if [ $daemon = 1 ] ; then if [ -f $qdir/queue.txt ] ; then if [ -f $qdir/use_build_job_daemon ] ; then nohup $0 -cfg $config -xdaemon > /dev/null & sleep 1 ; exit 0 else echo echo "The build has been configured to use a command for" echo "adding jobs (useing another job scheduler)." echo exit 1 fi else echo echo "$qdir:" echo "Queue not found! Please start 'Build-Target -cfg $config'" echo "first on the master node ..." echo exit 1 fi fi if [ $xdaemon = 1 ] ; then echo "Writing output to $build_logs/build_job_${HOSTNAME}_$$.log." >&2 exec > "$build_logs/build_job_${HOSTNAME}_$$.log" 2>&1 < /dev/null echo -e "Build-Job (daemon mode)\trunning on ${HOSTNAME} with PID $$" \ > "$qdir/build_job_${HOSTNAME}_$$.stat" date "+%H:%M ${HOSTNAME} new build-job daemon with PID $$" \ >> $qdir/1_$qid.msg while [ -f $qdir/queue.txt -a -f $qdir/use_build_job_daemon -a \ -f "$qdir/build_job_${HOSTNAME}_$$.stat" ] ; do didsomething=0 while read next && [ "$next" ] ; do set $next ; qid="$1-$6" if [ -f $qdir/$qid.job -a ! -f $qdir/$qid.lock ] ; then $0 -cfg $config $qid didsomething=1 ; break fi done < $qdir/queue.txt [ $didsomething = 1 ] || sleep 3 done rm -f "$qdir/build_job_${HOSTNAME}_$$.stat" if [ -f $qdir/queue.txt ] ; then date "+%H:%M ${HOSTNAME}%tbuild-job daemon ended ($$)" \ >> $qdir/8_$qid.msg fi echo "Queue has been removed. exit now." exit 0 fi for qid ; do if [ -f $qdir/$qid.job ] ; then if ! mv $qdir/$qid.todo $qdir/$qid.lock 2> /dev/null ; then echo "Job locked by other build proc:" \ "$qid ($qdir/$qid.lock)!" exit 1 fi . $qdir/$qid.job date "+Job $qid%t$HOSTNAME ($PPID) since %H:%M %Y-%m-%d" \ > $qdir/$qid.lock date "+%H:%M ${HOSTNAME}:%tbuilding job '$qid' ($PPID) .." \ >> $qdir/6_$qid.msg pkgloop_package $next if [ -f "${build_root}/var/adm/logs/$qid.log" ] ; then date "+%H:%M ${HOSTNAME}:%tfinished job '$qid' ` `(ok)" >> $qdir/3_$qid.msg else date "+%H:%M ${HOSTNAME}:%tfinished job '$qid' ` `(ERROR)" >> $qdir/3_$qid.msg fi rm -f $qdir/$qid.lock $qdir/$qid.job else echo "No such job: $qid ($qdir/$qid.job)!" ; exit 1 fi done