【问题标题】:How to restart a script from a specific point?如何从特定点重新启动脚本?
【发布时间】:2017-10-31 20:56:38
【问题描述】:

有没有办法制作这个脚本

#!/bin/bash

X=0

while true; do
    if [ $X -eq 10 ]; then
        sudo rm -r /var/log/daemon.log
        sudo rm -r /var/log/syslog
        sudo reboot
    fi

    expressvpn disconnect

    while timeout 2 ./typer; [ $? -eq 124 ]
    do
        exec $0
        let X++
    done
done

如果命令超时,则从语句X=0 之后重新启动以使计数器不重置?我正在使用exec $0,但每次我猜它都会重置计数器

【问题讨论】:

    标签: bash if-statement counter


    【解决方案1】:

    timer="${1-0}"(定时器的默认值)开始,然后exec $0 "${timer}" 以在后续运行中保持定时器值。

    另一个优点是,这使您可以轻松测试超时时发生的情况 - 只需使用值 10 调用它。

    PS:为了安全起见,您的 -eq 应该是 -ge(大于或等于),以防错误将计时器增加 2。

    【讨论】:

    • 等一下,我从来没有用过这样的东西......我是否必须保留计数器并添加这两行或计时器就像一个新的计数器?你能给我链接一份手册或解释一下什么是“计时器”吗?
    • 只是X的重命名。一个更好的名字是retries 或其他名称。
    • 哦,好的我试试
    • 那么 if 条件呢?我应该将 $X 更改为 $timer 吗?
    【解决方案2】:

    您可以使用标志来完成相同的操作。 在脚本开头创建一个标志文件,并在结束脚本之前删除该文件。 并检查你想要休息的标志条件。

    【讨论】:

    • 我该怎么做?
    • 你可以使用 if [ ! -f /tmp/abc.txt ];那么
    • Mmh... 不错的解决方案,但它与计数器不同,因为它第一次失败,if 条件满足...我需要 9 次其他超时才能重新启动。跨度>
    猜你喜欢
    • 2018-11-03
    • 2015-06-14
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    • 2014-06-07
    • 1970-01-01
    相关资源
    最近更新 更多