重新启动被系统终止的命令

重新启动被系统终止的命令

我一直在使用Gmvault备份我的 Gmail 电子邮件帐户,但由于我用于执行此工作的机器只有 1GB 内存,因此当它耗尽所有可用内存时,它经常被系统 (Ubuntu) 终止。但如果我重新启动它,它就会从终止点恢复。

所以我想要一个命令让它在被杀死后重新启动。我试过这种方法,但没有用:

for i in {1...999}; do gmvault sync [email protected] -d ./peter123 --resume; done;

当系统终止它时,它会终止整个命令(整个循环)而不是循环中的当前迭代。

答案1

OOM 杀手 发送 SIGKILL, 所以没有办法优雅地处理杀戮. 但你可以简单地使进程孤立以避免周围的循环被终止:

while true
do
    nohup gmvault sync [email protected] -d ./peter123 --resume &
    pid=$!
    wait $pid || continue
    break
done

使用不存在的脚本进行测试内存不足第三次运行:

$ 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

输出:

$ 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

已证明。

相关内容