-1

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

我想这样做,即使 php 脚本失败,bash 脚本也会继续循环。谁能指出我正确的方向?我已经搜索了一段时间,但似乎找不到答案,也许我没有使用正确的搜索词。

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

2 回答 2

2

Rjz 的评论是正确的,你应该使用cron. 为此,运行crontab -e并添加这一行:

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

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

于 2012-04-06T02:39:47.797 回答
1

这:

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错误||

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

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

于 2012-04-27T05:05:10.857 回答