重启后如何继续使用Shell脚本?

时间:2013-01-25 11:58:01

标签: mysql shell

我有一个需要在循环中运行的Shell脚本,并执行一系列命令,当它完成重复时,因此循环。在每个命令之间有一个睡眠命令几分钟。 "工作"永远不应该终止。我可以让脚本启动一个启动时间,但是当系统重新启动时,它需要在命令序列中停止的地方继续。

我怎样才能做到最好?我应该创建一个命令队列的MySQL表,并在每次成功执行后删除每一行吗?然后,当它完成循环时,它将重新填充队列表并从顶部开始。

似乎我错过了一些让这更简单的东西。提前感谢您的有益见解!

3 个答案:

答案 0 :(得分:1)

您可能需要重写代码,使其如下所示:

while: ; do
    case $step in
        0) command_1 && ((step++)) ;;
        1) command_2 && ((step++)) ;;
        ...
        9) command_9 && step=0 ;;
        *) echo "ERROR" >&2 ; exit 1 ;;
    esac
done

因此,您将了解通过测试step的价值所做的工作。

然后,您可能希望在执行trap循环之前设置while,以便在退出时将step的值写入日志文件:

trap "echo step=$step > log_file" EXIT

然后,您需要做的就是在脚本开头的source日志文件,最后一个文件将继续其停止的作业。

答案 1 :(得分:0)

对于这种情况,MySQL听起来像是一个非常复杂的解决方案。一般来说,我会考虑某种基于文件系统的标记。您可以将当前执行状态保存在一个或多个文件中e。 G。在/var/run中,让您的脚本在启动时检查这些文件。

完成一步后,重命名文件以反映需要完成的下一步等等。

最后,重命名或删除它,以便下次脚本运行时,它将开始一个新的循环。

答案 2 :(得分:0)

我认为您可以使用cron作业。一个cron作业可以每分钟运行一次,并且使用“锁定文件”策略,只有当锁定文件不存在时才能运行脚本,因此当前一个运行的脚本结束时。