Установите указанные ниже настройки в smb.conf
файле [global] секции :
socket options = TCP_NODELAY SO_RCVBUF=65536 SO_SNDBUF=65536
read raw = yes
write raw = yes
max xmit = 65535
dead time = 15
getwd cache = yes
и перезапустите службу smbd, чтобы активировать эти настройки, запустив service smb restart
или service smbd restart
.
Вот что я придумал.
Во-первых, фиктивный run
скрипт, который в вашем случае будет совсем другим:
#!/bin/bash
sleep $1;
exit $2
Далее следует bg
скрипт, переводящий run
заданий в фоновый режим с соответствующими перенаправлениями:
#!/bin/bash
echo $$
( ( touch $$.running; "$@" > $$.out 2>$$.err ; echo $? > $$.exitcode ) & )
Наконец, driver
скрипт, управляющий всем этим. Это сценарий, который вы на самом деле запустите, а не два других, конечно. Комментарии внутри должны помочь, но я протестировал его, и, похоже, он работает нормально.
#!/bin/bash
# first run all commands via "bg"
./bg./run 10 0
./bg./run 5 5
./bg./run 2 2
./bg./run 0 0
#... and so on
while :
do
shopt -s nullglob
for i in *.exitcode
do
j=$(basename $i.exitcode)
# now process $j.out, $j.err, $j.exitcode however you want; most
# importantly, *move* at least the exitcode file out of this directory
echo $j had exit code of `cat $i`
rm $j.*
done
shopt -u nullglob
ls *.running >/dev/null 2>&1 || exit
sleep 1
done