可恢复脚本的最佳选择

时间:2012-12-26 17:51:55

标签: shell unix

我正在编写一个脚本,按顺序执行大约10个后端进程,具体取决于前一个进程是否执行没有任何错误。

现在让我们假设这个场景,让我们说第五个进程失败并且脚本出来了。但我希望以这样的方式对其进行编码:当下次用户运行它时(由于上次退出哪个脚本而删除错误之后),他应该能够从第5个进程开始运行而不是从第1个进程运行。< / p>

更具体地说,假设以下是脚本:

Script Starts
Process1
if [ $? -eq 0 ] then
Process2
if [ $? -eq 0 ] then
Process3
if [ $? -eq 0 ] then
..
..
..
..
if [ $? -eq 0 ] then
Process10
else
exit

因此,如果任何一个进程无法以状态0完成,脚本将随时退出。因此,如果process5失败,并且用户更正问题并重新启动脚本,则脚本应该再次从process5开始而不是process1或者至少应该为用户提供一个选项,如果他想恢复脚本或从头开始重新开始,即process1。

我们可以用这些脚本编写所有可能的方法,也请记住,我不允许使用临时数据库,我可以存储每个进程的状态。

我需要在unix中使用sh(shell脚本)进行编码。

1 个答案:

答案 0 :(得分:3)

一个简单的解决方案是编写戳记文件:

#/bin/sh

set -e  # Automatically abort if any simple command fails

if ! test -f cmd1-stamp; cmd1; fi
touch cmd1-stamp
if ! test -f cmd2-stamp; cmd2; fi
touch cmd2-stamp

当脚本执行时,如果存在cmd1-stamp,则不执行cmd1。否则,执行cmd1。如果失败,脚本将中止。请注意,非常很容易编写test -f cmd1-stamp || cmd1,这似乎有效(在bash中),但shell规范声明如果简单命令失败,shell将中止{{1}我怀疑这是(另一个)bash的实例不符合规范。 (虽然如果失败的命令是AND或OR列表的一部分,它似乎没有指定shell不会中止。)