【问题标题】:Bash script to restart process on crash or on file change用于在崩溃或文件更改时重新启动进程的 Bash 脚本
【发布时间】:2016-06-24 14:02:34
【问题描述】:

我正在编写一个服务器进程,我想制作一个 Bash 脚本,该脚本将在以下两种情况之一下重新启动该进程:

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

脚本本身不应在任何一种情况下退出。

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

【问题讨论】:

    标签: bash process scripting build-automation


    【解决方案1】:

    我对 fswatch 不熟悉,但是假设您设置了 opts 和 path 以便它仅在您关心的文件发生更改并且您不担心缓冲时才写入数据,您可以尝试:

    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
    

    【讨论】:

    • 我不能 100% 确定,在第二种情况下,基于 $? 的测试是可靠的。在这两种情况下,它都是同一进程的退出状态。所以,它可能无法区分 2 个失败案例......我们可以在基于 fswatch 的循环中设置一个变量(我们需要为此或shopt -s lastpipe 进行进程重定向)并在while true 循环中使用它吗?
    猜你喜欢
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多