2016-06-24 52 views
2

我编码一个服务器进程的过程,我想打一个bash脚本,将重新启动处理在任一两个条件:bash脚本来重新启动崩溃或文件变更

  1. 当前进程退出(在这种情况下,一些延迟后重新启动)
  2. 可执行文件被修改(在这种情况下,立即重新启动)

脚本本身不应该退出的任何一个条件。

我可以做任何这些事情(用一个简单的循环,或用fswatch),但我的两次尝试都没有奏效。有没有办法在Bash脚本中执行这两种操作?

回答

1

我不熟悉fswatch,但假设你已经设置OPTS和路径,例如,只有当你关心的改变文件,你不担心缓冲将会写入数据时,你可以尝试:

fswatch $opts $path | while read k; do kill $pid; done & 
while sleep 1; do # delay 1 second between restarts 
    cmd & 
    pid=$! 
    wait $pid 
done 

这不会在可执行文件更改时立即重新启动。为了做到这一点,你可以做(​​但我不认为这是值得的):

fswatch $opts $path | while read k; do kill $pid; done & 
while : ; do 
    cmd & 
    pid=$! 
    wait $pid 
    test $? -gt 128 || sleep 1 
done 
+0

我不是100%肯定,在第二种情况下,基于'$?'的测试是可靠的。在这两种情况下,它都是来自同一过程的退出状态。所以,它可能无法区分2种失败情况......我们可以在基于fswatch的循环中设置一个变量(我们需要进程重定向或'shopt -s lastpipe')并在while循环中使用它? – anishsane