O Assassino da OOM envia o SIGKILL , então não há como lidar com a matança . Mas você pode simplesmente tornar o processo órfão para evitar que o loop circundante seja encerrado:
while true
do
nohup gmvault sync [email protected] -d ./peter123 --resume &
pid=$!
wait $pid || continue
break
done
Teste com um script que não fique sem memória na terceira execução:
$ cat test.sh
if [ -e tries.txt ]
then
tries=$(($(cat tries.txt) + 1))
else
tries=0
fi
echo $tries > tries.txt
if [ $tries -lt 2 ]
then
echo Failing $tries
ulimit -v 50000
:(){ : $@$@;};: :
fi
echo Succeeding
Saída:
$ while true
> do
> nohup bash test.sh &
> pid=$!
> wait $pid || continue
> break
> done
[1] 28972
nohup: ignoring input and appending output to ‘nohup.out’
[1]+ Exit 2 nohup bash test.sh
[1] 28973
nohup: ignoring input and appending output to ‘nohup.out’
[1]+ Exit 2 nohup bash test.sh
[1] 28975
nohup: ignoring input and appending output to ‘nohup.out’
[1]+ Done nohup bash test.sh
$ cat nohup.out
Failing 0
test.sh: xmalloc: cannot allocate 8388609 bytes (29577216 bytes allocated)
Failing 1
test.sh: xmalloc: cannot allocate 8388609 bytes (29577216 bytes allocated)
Succeeding
QED.