Мне нужно запускать различные задания в фоновом режиме, используя /Cobra.
У меня 32 ядра, и я хочу оставить пару свободных, иначе моя машина станет слишком медленной, чтобы делать другие вещи.
В этом коде я проверяю количество процессов с помощью ps и запускаю только до максимального числа 30.
Тем не менее, "ps", похоже, не предоставляет информацию своевременно. Несмотря на то, что я жду 3 секунды, ps иногда объявляет количество совпадающих процессов. Это, по-видимому, когда они только начинают работать в фоновом режиме.
Есть ли способ получить лучший ответ от ps (или по-другому), единственное решение, которое у меня есть, - это спать дольше, но это немного тяжело.
#!/bin/sh
#set -x
while true
do
NUMRUNNING=`ps | egrep FormsApplic | wc -l`
JOBS=`cat jobs.lst | wc -l`
if [ $JOBS -gt 0 ]
then
MAXSTART=$((30-$NUMRUNNING))
NUMTOSTART=$JOBS
if [ $NUMTOSTART -gt $MAXSTART ]
then
NUMTOSTART=$MAXSTART
fi
for ((i=1;i<=$NUMTOSTART;i++))
do
JOB=`head -n1 jobs.lst`
echo $JOB >> /tmp/jobsStarted
sed -i 1d jobs.lst
/cobra $JOB &
done
fi
LASTNUMRUNNING=$NUMRUNNING
sleep 3
done