【问题标题】:Start process if dead如果死了就开始进程
【发布时间】:2012-04-03 11:59:42
【问题描述】:

如果没有启动,我正在尝试做的是启动一个进程。这是我尝试的方法

#!/bin/bash
pid=`ps ax | grep app | grep -v grep | wc -l`
  if [ $pid = 0 ]
then
 /etc/init.d/app start
fi

问题在于这条线

/etc/init.d/app start

不执行。这里有什么问题? 我知道我可以使用 daemontools 但我喜欢“bash”方法。

【问题讨论】:

  • 您是否尝试过单独运行ps ax ... 行以查看它返回的内容?
  • pid 通常是一个进程 ID。在这种情况下,这是一个计数。这很危险,因为任何东西都可以将名称放入进程表中。

标签: linux bash process daemon


【解决方案1】:

看看== 运算符。

最好的可能是这样的

pid=`ps ax | grep app | grep -v grep`
test -z "$pid" && /etc/init.d/app start

【讨论】:

    【解决方案2】:

    您可以通过将关键字转换为与其自身不匹配的正则表达式来避免双重 grep。您可以使用grep -c 而不是使用wc 计数。在您的脚本中,您可以尝试:

    pcount=`ps ax | grep -c "[a]pp"`
    

    或者,使用实际的 pid 而不是进程计数:

    #!/bin/bash
    
    pid=`ps ax | awk '/[a]pp/{print $1}'`
    
    if ! ps "$pid" >/dev/null; then
      /etc/init.d/app start
    fi
    

    请注意,这仍然是处理服务重启的一种非常糟糕的方法。你应该看看 app 是否维护了它自己的 pid 文件,可能在 /var/run/ 的某个地方,然后测试它的内容。

    #!/bin/sh
    if [ -f /var/run/app.pid ]; then
      if ps `cat /var/run/app.pid` >/dev/null; then
        /etc/init.d/app start
      fi
    else
      /etc/init.d/app start
    fi
    

    或者更好的是,使用daemontools runitupstart 或类似的东西来启动应用程序,它们会为你处理这些事情。

    【讨论】:

    • 您疯狂地从ps ax 中解析出pid,但您所说的其余部分都是极好的建议。 (提示:ps ax -o pid=,或至少cut -f1 -d' '
    • 嘿。我也不喜欢从ps ax 得到东西,但是你去吧。根据您的建议,cut -f1 -d' ' 将不起作用,因为 spacewhitespace 不同。如果您包含除 pid= 之外的任何内容,则 ps 列是右对齐的。这将在字段 5 中放置一个数字 pid,在字段 4 中放置一个 2 位 pid,等等。
    • 对不起,我应该更具体一些。解决方案是为pid 列请求最小大小,如下所示:ps ax -o pid:1=,comm=
    • 那个命令行对我不起作用。它报告ps: pid:1: keyword not found
    • ps 的哪个版本?我为此假设 GNU。
    【解决方案3】:

    如果你有 GNU ps,这很简单,不需要任何疯狂。

    if ! ps -C app >/dev/null ; then
         /etc/init.d/app start
    fi
    

    您只需要注意传递给psapp 是实际的进程名称。

    【讨论】:

      【解决方案4】:

      我现在无法检查我的服务器,但 Debian 使用 start-stop-daemon 加载服务,这似乎是用于您的任务的正确工具,因为它通过 PID 跟踪您的后台进程,而不仅仅是匹配进程列表中的名称(也可以这样做)。

      【讨论】:

        猜你喜欢
        • 2013-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-07
        • 2015-09-25
        • 2010-10-16
        相关资源
        最近更新 更多