meer voortgang
This commit is contained in:
parent
7214260e3c
commit
d06583e340
2 changed files with 124 additions and 53 deletions
|
|
@ -1,13 +1,31 @@
|
||||||
- config file gebruiken
|
======
|
||||||
- meerdere parallele batches
|
= TODO
|
||||||
- er mogen er X tegelijk draaien
|
======
|
||||||
|
|
||||||
- prioriteiten? mogelijk in de toekomst... mbv jobs naamgeving? prefix H voor high, N voor normal en L voor low
|
- prioriteiten? mogelijk in de toekomst... mbv jobs naamgeving? prefix H voor high, N voor normal en L voor low
|
||||||
- noodstop
|
- noodstop
|
||||||
|
|
||||||
|
processors pollen zelf de jobs dir voor nieuwe taken?
|
||||||
|
master zorgt voor het draaien van juiste aantal processors
|
||||||
|
master kan processors een signaal geven dat ze geen nieuwe mogen opstarten
|
||||||
|
|
||||||
|
threading?
|
||||||
|
|
||||||
|
jobs die input uit een file willen?
|
||||||
|
|
||||||
|
======
|
||||||
|
= Done
|
||||||
|
======
|
||||||
|
|
||||||
|
- iets inbouwen dat jobnummering fijn blijft ook al komen er digits bij:
|
||||||
|
7 8 9 10
|
||||||
|
ineens wordt 10 voor 7 gescheduled...
|
||||||
|
- config file gebruiken
|
||||||
|
- meerdere parallele batches
|
||||||
|
- er mogen er X tegelijk draaien
|
||||||
- scheduling door jobs uit directory naar processing dir over te hevelen
|
- scheduling door jobs uit directory naar processing dir over te hevelen
|
||||||
- indien failure naar faildir of nogmaals (X keer?)
|
- indien failure naar faildir of nogmaals (X keer?)
|
||||||
- wanneer klaar incl resultaten naar done dir
|
-
|
||||||
|
|
||||||
dirs bijv. zo:
|
dirs bijv. zo:
|
||||||
jobs
|
jobs
|
||||||
processors/job#/job
|
processors/job#/job
|
||||||
|
|
@ -20,15 +38,4 @@ failure/job#/rundir
|
||||||
failure/job#/output
|
failure/job#/output
|
||||||
monitor/processor# symlink naar output current job
|
monitor/processor# symlink naar output current job
|
||||||
|
|
||||||
processors pollen zelf de jobs dir voor nieuwe taken?
|
wanneer klaar incl resultaten naar done dir
|
||||||
master zorgt voor het draaien van juiste aantal processors
|
|
||||||
master kan processors een signaal geven dat ze geen nieuwe mogen opstarten
|
|
||||||
|
|
||||||
threading?
|
|
||||||
|
|
||||||
jobs die input uit een file willen?
|
|
||||||
|
|
||||||
|
|
||||||
iets inbouwen dat jobnummering fijn blijft ook al komen er digits bij:
|
|
||||||
7 8 9 10
|
|
||||||
ineens wordt 10 voor 7 gescheduled...
|
|
||||||
|
|
|
||||||
136
pbatch/pb.rb
136
pbatch/pb.rb
|
|
@ -95,14 +95,17 @@ def increasejobscounter
|
||||||
file.seek(0)
|
file.seek(0)
|
||||||
file.puts jobscounter
|
file.puts jobscounter
|
||||||
}
|
}
|
||||||
File.new(COUNTERFILE, "r+").flock(File::LOCK_UN)
|
File.new(COUNTERFILE).flock(File::LOCK_UN)
|
||||||
else
|
else
|
||||||
File.open(COUNTERFILE, "w"){|file|
|
# XXX wellicht eerst een touch ofzo doen en dan locken voor de schrijf loop
|
||||||
|
# geopend wordt
|
||||||
|
FileUtils.touch(COUNTERFILE)
|
||||||
File.new(COUNTERFILE).flock(File::LOCK_EX)
|
File.new(COUNTERFILE).flock(File::LOCK_EX)
|
||||||
|
File.open(COUNTERFILE, "w"){|file|
|
||||||
jobscounter = 1
|
jobscounter = 1
|
||||||
file.puts jobscounter
|
file.puts jobscounter
|
||||||
}
|
}
|
||||||
File.new(COUNTERFILE, "r+").flock(File::LOCK_UN)
|
File.new(COUNTERFILE).flock(File::LOCK_UN)
|
||||||
end
|
end
|
||||||
return jobscounter
|
return jobscounter
|
||||||
end
|
end
|
||||||
|
|
@ -150,26 +153,6 @@ EOT
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def master
|
|
||||||
# als ik threading ga gebruiken is deze dus niet nodig
|
|
||||||
File.open(RUNNINGFILE, "w").flock(File::LOCK_EX){|file|
|
|
||||||
file.puts "0"
|
|
||||||
}
|
|
||||||
|
|
||||||
# echo 0 >"${basedir}/$runningfile"
|
|
||||||
#
|
|
||||||
# while sleep $waittime; do
|
|
||||||
# if [ $(cat "${basedir}/${runningfile}") -lt $maxproc ]; then
|
|
||||||
# # via ls omdat anders de globbing klote is
|
|
||||||
# jl=$(ls ${basedir}/jobs/)
|
|
||||||
# if [ -n "$jl" ]; then
|
|
||||||
# ${pbcommand} process &
|
|
||||||
# fi
|
|
||||||
# readconfig
|
|
||||||
# fi
|
|
||||||
# done
|
|
||||||
end
|
|
||||||
|
|
||||||
def deljob
|
def deljob
|
||||||
jobnumber = ARGV[0]
|
jobnumber = ARGV[0]
|
||||||
if jobnumber.nil?
|
if jobnumber.nil?
|
||||||
|
|
@ -226,24 +209,76 @@ def changeprio
|
||||||
puts "unimplemented"
|
puts "unimplemented"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def incrementrunning
|
||||||
|
# als ik threading ga gebruiken is dit niet meer nodig (want geen runningfile nodig)
|
||||||
|
File.new(RUNNINGFILE).flock(File::LOCK_EX)
|
||||||
|
File.open(RUNNINGFILE, "r+"){|file|
|
||||||
|
running = file.read
|
||||||
|
running = running.to_i + 1
|
||||||
|
file.seek(0)
|
||||||
|
file.trunc
|
||||||
|
file.puts running
|
||||||
|
}
|
||||||
|
File.new(RUNNINGFILE).flock(File::LOCK_UN)
|
||||||
|
end
|
||||||
|
|
||||||
|
def decrementrunning
|
||||||
|
# als ik threading ga gebruiken is dit niet meer nodig (want geen runningfile nodig)
|
||||||
|
File.new(RUNNINGFILE).flock(File::LOCK_EX)
|
||||||
|
File.open(RUNNINGFILE, "r+"){|file|
|
||||||
|
running = file.read
|
||||||
|
running = running.to_i - 1
|
||||||
|
if running < 0
|
||||||
|
running = 0
|
||||||
|
end
|
||||||
|
file.seek(0)
|
||||||
|
file.trunc
|
||||||
|
file.puts running
|
||||||
|
}
|
||||||
|
File.new(RUNNINGFILE).flock(File::LOCK_UN)
|
||||||
|
end
|
||||||
|
|
||||||
|
def getjob
|
||||||
|
Dir.entries("#{@basedir}/#{JOBSDIR}").each{|file|
|
||||||
|
if file == '.' or file == '..'
|
||||||
|
next
|
||||||
|
else
|
||||||
|
if FileTest.file?("#{@basedir}/#{JOBSDIR}/#{file}")
|
||||||
|
Dir.mkdir("#{@basedir}/#{PROCDIR}/#{file}")
|
||||||
|
FileUtils.mv("#{@basedir}/#{JOBSDIR}/#{file}", "#{@basedir}/#{PROCDIR}/#{file}/job")
|
||||||
|
return file
|
||||||
|
end
|
||||||
|
end
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
def failjob(jobnumber)
|
||||||
|
FileUtils.mv("#{@basedir}/#{PROCDIR}/#{jobnumber}", "#{@basedir}/#{FAILDIR}")
|
||||||
|
end
|
||||||
|
|
||||||
|
def finishjob(jobnumber)
|
||||||
|
FileUtils.mv("#{@basedir}/#{PROCDIR}/#{jobnumber}", "#{@basedir}/#{RESULTDIR}")
|
||||||
|
end
|
||||||
|
|
||||||
def runprocessor
|
def runprocessor
|
||||||
# incrementrunning
|
incrementrunning
|
||||||
# sleep 1
|
sleep 1 # XXX niet nodig als locking echt werkt (of bij threading)
|
||||||
# runjob=$(getjob)
|
runjob = getjob
|
||||||
# if [ -n "${runjob}" ]; then
|
if ! runjob.nil?
|
||||||
# echo "Starting job: ${runjob}"
|
puts "Starting job: #{runjob}"
|
||||||
# owd=$(pwd)
|
owd = Dir.pwd
|
||||||
# cd "${basedir}/processors/${runjob}"
|
Dir.cd("#{@basedir}/#{PROCDIR}/#{runjob}")
|
||||||
|
# XXX IPC nog even uitzoeken... popen3 ?
|
||||||
# if "${basedir}/processors/${runjob}/job" 2>&1 > "${basedir}/processors/${runjob}/output" ;then
|
# if "${basedir}/processors/${runjob}/job" 2>&1 > "${basedir}/processors/${runjob}/output" ;then
|
||||||
# finishjob ${runjob}
|
# finishjob ${runjob}
|
||||||
# echo "Finished job: ${runjob}"
|
puts "Finished job: #{runjob}"
|
||||||
# else
|
# else
|
||||||
# failjob ${runjob}
|
# failjob ${runjob}
|
||||||
# echo "Failed job: ${runjob}"
|
puts "Failed job: #{runjob}"
|
||||||
# fi
|
# fi
|
||||||
# cd $owd
|
Dir.cd(owd)
|
||||||
# fi
|
end
|
||||||
# decrementrunning
|
decrementrunning
|
||||||
end
|
end
|
||||||
|
|
||||||
def stop
|
def stop
|
||||||
|
|
@ -254,7 +289,36 @@ def stopall
|
||||||
puts "unimplemented"
|
puts "unimplemented"
|
||||||
end
|
end
|
||||||
|
|
||||||
pbcommand = $0
|
def master
|
||||||
|
if Process.euid != 0
|
||||||
|
puts "If your jobs need root priviledges (XXX spelling) you want to run this as root"
|
||||||
|
end
|
||||||
|
|
||||||
|
# als ik threading ga gebruiken is dit niet meer nodig (want geen runningfile nodig)
|
||||||
|
if ! FileTest.file?(RUNNINGFILE)
|
||||||
|
FileUtils.touch(RUNNINGFILE)
|
||||||
|
end
|
||||||
|
File.new(RUNNINGFILE).flock(File::LOCK_EX)
|
||||||
|
File.open(RUNNINGFILE, "w"){|file|
|
||||||
|
file.puts "0"
|
||||||
|
}
|
||||||
|
File.new(RUNNINGFILE).flock(File::LOCK_UN)
|
||||||
|
|
||||||
|
# while sleep $waittime; do
|
||||||
|
# if [ $(cat "${basedir}/${runningfile}") -lt $maxproc ]; then
|
||||||
|
# # via ls omdat anders de globbing klote is
|
||||||
|
# jl=$(ls ${basedir}/jobs/)
|
||||||
|
# if [ -n "$jl" ]; then
|
||||||
|
# ${pbcommand} process &
|
||||||
|
# fi
|
||||||
|
# readconfig
|
||||||
|
# fi
|
||||||
|
# done
|
||||||
|
end
|
||||||
|
|
||||||
|
# XXX SIGHUP handler die config opnieuw inleest
|
||||||
|
|
||||||
|
@pbcommand = $0
|
||||||
|
|
||||||
command = ARGV.shift
|
command = ARGV.shift
|
||||||
@basedir = Dir.pwd
|
@basedir = Dir.pwd
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue