Bash 如何防止连续循环结束

Bash 如何防止连续循环结束,bash,Bash,我有一个简单的bash脚本,它每10分钟调用一个php脚本,执行一些维护。每隔一段时间,这个php脚本就会在运行时终止,当这种情况发生时,bash脚本就会退出 我想让bash脚本继续循环,即使php脚本出现问题。谁能给我指出正确的方向吗?我已经搜索了一段时间,但我似乎找不到答案,也许我没有使用正确的搜索词 #!/bin/sh set -e while : do /usr/bin/php /path/to/maintenance/script.php sle

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

我想让bash脚本继续循环,即使php脚本出现问题。谁能给我指出正确的方向吗?我已经搜索了一段时间,但我似乎找不到答案,也许我没有使用正确的搜索词

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

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

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

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

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

*/10 * * * * /usr/bin/php /path/to/maintenance/script.php
如果设置正确,
cron
将通过电子邮件向您发送任何输出(包括错误消息)。

set -e
行设置shell的“出错时退出”标志,该标志告诉它,如果它运行的程序以非零状态退出,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
将正常工作(一个或另一个回波将出现,然后最后一个回波也将出现)

回到朦胧时代,当
/bin/sh
不是POSIX并且是用Bournegol编写的时候,
sh
的一些版本中有一个bug,它破坏了
|
表达式:

set -e
false || true
echo if this prints, your shell is OK
(逻辑错误也在内部应用于
&
表达式,但在那里是无害的,因为
false&&anything
本身就是false,这意味着整个表达式无论如何都会失败!)从那以后,我一直对“-e”保持警惕

set -e
行设置shell的“出错时退出”标志,该标志告诉它,如果它运行的程序以非零状态退出,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
将正常工作(一个或另一个回波将出现,然后最后一个回波也将出现)

回到朦胧时代,当
/bin/sh
不是POSIX并且是用Bournegol编写的时候,
sh
的一些版本中有一个bug,它破坏了
|
表达式:

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

(逻辑错误在内部应用到<代码> &代码>表达式中,但它是无害的,因为<代码> false & &任何< /代码>本身都是错误的,这意味着整个表达式无论如何都失败了)从那时起,我一直在警惕“-e”。

你会考虑设置一个Cron Work来处理这个吗?Con是正确的方法,而且,你的
循环时,你不设置一些条件吗?我的意思是它在上面的代码示例中无限循环。@rjz:我不想使用cron来实现这一点,因为php脚本运行的时间是可变的,我不想处理pid文件。@Jasonw:脚本的要点是它可以连续运行。的确,除非您在
ERR
上设置了
-e
或启用了
trap
或类似设置(上面没有)。当然,外部的东西可能会杀死脚本,但是看起来PHP代码更容易被卡住,只是永远坐在那里,这样你就永远无法进入<代码>睡眠>代码>。你会考虑设置一个Cron作业来处理这个吗?Con是正确的方法,但是,你的<代码>,你不设定一些条件吗?我的意思是它在上面的代码示例中无限循环。@rjz:我不想使用cron来实现这一点,因为php脚本运行的时间是可变的,我不想处理pid文件。@Jasonw:脚本的要点是它可以连续运行。的确,除非您在
ERR
上设置了
-e
或启用了
trap
或类似设置(上面没有)。当然,外部因素可能会扼杀脚本,但php代码似乎更可能被卡住,永远坐在那里,因此您永远无法使用
sleep
命令。