[linux] посоветуйте Job Scheduler
http://www.clusterbuilder.org/
А там есть http://www.clusterresources.com/products/maui/
Но не знаю, подойдёт ли.
А там есть http://www.clusterresources.com/products/maui/
Но не знаю, подойдёт ли.
http://www.clusterresources.com/products/maui/Спасибо, почитал... похоже, это реально мощная штука, мне бы что-нибудь раз в 100 полегче
cron-то не подходит что ли?
cron-то не подходит что ли?Я думаю, что cron такое не умеет.
Например, вот что мне нужно: есть программа, которая обрабатывает файл (передаётся через аргумент в командной строке). Мне нужно обработать такой программой несколько файлов. Это можно сделать так:
for file in $files; do ./my_program $file; done
Однако, таким образом мы занимаем ровно один процессор (программа не распараллелена и обработка каждого файла занимает несколько суток. Поэтому хотелось бы использовать возможности всех 4х ядер и поставить считаться все файлы одним махом. В LSF это делается так:
for file in $files; do bsub my_program $file; done
причём, если задач больше, чем доступных процессоров, то "лишние" задачи стоят в ожидающей очереди до тех пор, пока не посчитаются уже запущенные.
Проблема в том, что LSF - коммерческий продукт, умеющий гораздо больше того, что мне нужно, и я не хочу платить за него. Кроме LSF я знаю MPI, но он ещё более громоздкая система и немного из другой оперы, хоть и есть в дебиане.
А других альтернатив я пока не нашёл - вот и ищу что-нибудь попроще и забесплатно.
Сейчас я запускаю и слежу за задачами вручную, а это отнимает время.
вот тут в ответах про какие-то стандартные решения говорили.
run.sh:
files=/path/to/files/*
CPU=4
# или скольк там у тебя ядёр :-]
for file in $files; do
while [ true ]; do
LS=`ls /tmp/my_program.* 2>/dev/null | wc -l`
if [ "1" == "$${LS} < ${CPU}" ]; then
break
fi
sleep 10
done
./my_program.sh "$file" &
sleep 1
done
А это положить рядом с твоим ./my_program:
my_program.sh:
TMPFILE=`mktemp /tmp/my_program`
./my_program "$1"
rm ${TMPFILE}
P.S. Это на вскидку. Могут быть мелкие ашипки.
из скрипта можно запустить параллельно хоть тысячу процессов через &
по-моему это самый простой способ
применительно к данному случаю:
,
$ for fin in $files; do fout=$fin.out; all="$all $fout"; echo -e "$fout: $fin\n\tmyscript $fin $fout\n" >> Makefile; done; echo "all: $all" >> Makefile && make -jN all
fin, fout - имена входного/выходного файлов
N - число процессоров
Оставить комментарий
Jackill
Посоветуйте лёгкий оперсоурсный Job Scheduler, типа LSF.Ситуация такая: есть 4-ядерный комп, на который хочется локально посылать в очередь кучу разных мелких задач. Больше ничего не нужно.
Что-то я среди пакетов дебиана искал и не нашёл...