【问题标题】:Loop Not Completing In Bash循环未在 Bash 中完成
【发布时间】:2019-06-18 12:28:03
【问题描述】:

我正在制作这个 Bash 脚本(见下文),它应该检查 Node.JS 文件是否正在运行,如果没有 - 它将重新启动文件并继续循环。但是,当它尝试运行该文件时,它不会继续。

这将在 Ubuntu 上运行,但我目前正在 Windows 10 上进行检查。我知道我可以使用 Nodemon,但我更愿意使用它。

没有node %NAME,循环运行良好 - 所以我猜这可能是因为一旦它尝试启动 Node.JS 它就不会继续,或者我在 Bash 中运行节点错误,但是我有看了另一个问题,看来我做得对。

任何帮助将不胜感激。谢谢

代码:

#!/bin/bash

NAME="Run.js"
RUN=`pgrep -f $NAME`

while true
do
    if [ "$RUN" == "" ]; then
        echo "Script is not running"
        node $NAME
    else
        echo "Script is running"
    fi
    sleep 5
done

【问题讨论】:

  • 脚本会一直阻塞直到node 退出,此时它会在node 启动后的位置继续。循环本身从不退出。也许你想在后台运行node,然后使用break
  • pm2 是一个有效的流程管理器,为什么不使用它来省去麻烦呢?
  • @PBurke 我可以,但是 1. 这是让我获得一些 bash 经验的东西,所以在我需要的任何情况下,我都可以。 2. 这是我正在做的一个项目。所以可能会在某个时候使用它,但谢谢。

标签: node.js bash ubuntu


【解决方案1】:

用于研究案例 避免节点阻塞脚本 您需要做的就是添加 &

 node $NAME &

话虽如此,有一个更好的选择来保留 脚本运行我推荐你作为
@P Burke 提到要了解 PM2 http://pm2.keymetrics.io/

#!/bin/bash

NAME="Run.js"
RUN=`pgrep -f $NAME`

while true
do
    if [ "$RUN" == "" ]; then
        echo "Script is not running"
        node $NAME &
    else
        echo "Script is running"
    fi
    sleep 5
done

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-18
    • 2020-11-27
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    相关资源
    最近更新 更多