崩溃脚本检查时重新启动

崩溃脚本检查时重新启动

我正在尝试编写一个 shell 脚本,检查是否有 2 个不同的进程正在运行,如果没有,则重新启动它们。我只想保持简单。这是正确的方法吗,因为看起来第二部分不起作用……

trap "exit" SIGINT

while true :
do
  ./stream.sh
  echo "Stream has Crashed"
done


trap "exit" SIGINT

while true :
do
  ./current_song.sh
  echo "Current Song has Crashed"
done

答案1

有几个问题:

  • 剧本从未超越第一部分done,这是第二部分不起作用的主要原因。
  • 没有舍邦
  • while true :很奇怪。true:都是 Bash 的内置函数,均返回 true。鞋底while true就够了,和一样while :。看来你想要() 同时使用这两种变体,这段代码甚至可以“工作”,即它不会失败。它不会失败,因为:你的这个不是我提到的内置函数;它是true命令的一个参数。true丢弃其命令行参数。true :true almost anything相当于true,所以你的while true :工作方式就像while true

从一个脚本重新启动许多独立进程的方法是这样的:

#!/bin/bash

trap "kill 0" SIGINT

while :; do process1; done &
while :; do process2; done &
# ...
while :; do processN; done

这将while在单独的 shell(N-1 个子 shell 和主 shell)中执行 N 个循环,因此每个循环都独立并行运行。对于您的情况,脚本可能是:

#!/bin/bash

trap "kill 0" SIGINT

while :
do
   ./stream.sh
   echo "Stream has Crashed"
done &

while :
do
   ./current_song.sh
   echo "Current Song has Crashed"
done

陷阱杀死(试图杀死)所有后代,这要归功于这个kill 0技巧

当前进程组中的所有进程都已收到信号

相关内容