如何防止连续循环结束

时间:2012-04-06 02:19:14

标签: bash

我有一个简单的bash脚本,它每10分钟调用一次php脚本来执行一些维护。每隔一段时间,这个php脚本会在运行时终止,当发生这种情况时,bash脚本会退出。

我想这样做,即使php脚本动摇,bash脚本也会继续循环。谁能指出我正确的方向?我一直在寻找一段时间,但我似乎无法找到答案,也许我没有使用正确的搜索条件。

#!/bin/sh
set -e    
while :    
do    
    /usr/bin/php /path/to/maintenance/script.php
    sleep 600    
done

2 个答案:

答案 0 :(得分:3)

Rjz的评论是正确的,您应该使用cron。为此,请运行crontab -e并添加以下行:

*/10 * * * * /usr/bin/php /path/to/maintenance/script.php

如果设置正确,cron会通过电子邮件向您发送任何输出(包括错误消息)。

答案 1 :(得分:1)

在:

set -e

行设置shell的“exit on error”标志,告诉它如果它运行的程序以非零状态退出,shell也应该退出:

set -e
false
echo if this prints, your shell is not honoring "set -e"

当然,正在测试其状态的程序有例外:

set -e
if prog; then
    echo program succeeded
else
    echo program failed
fi
echo this will still print

将正常工作(将发生一个或另一个回声,然后最后一个也将发生。)

回到Dim Time,当/bin/sh是非POSIX并且是用Bournegol编写的时,sh的某些版本中有一个错误导致||表达式被破坏:

set -e
false || true
echo if this prints, your shell is OK

(逻辑错误也在内部应用于&&表达式,但在那里无害,因为false && anything本身就是假的,这意味着整个表达式无论如何都会失败!)从那以后,我一直都是警惕“-e”。