用于检查数组是否为空的Shell脚本,如果是,则重新启动程序

时间:2014-09-07 07:56:31

标签: arrays shell sh

我想创建一个继续运行的shell脚本来检查我的两个轻量级Web服务器是否仍在运行,如果没有,则重新启动它们。

我可以使用命令pgrep -f thin来获取名为thin的服务器的pids数组(?)。

当这个返回的数组的计数为零时,我想运行一个启动两个服务器的命令:

cd [path_to_app] && bundle exec thin -C app_config.yml start

pgrep -f thin返回正在运行的服务器的所有pid。例如:

  

23542 23425

我是shell脚本的新手,并且不知道如何将pgrep-f thin的结果存储在数组中。如,

#!/bin/sh
while true
do

    arr=$(pgrep -f thin) # /edited and now THIS WORKS!


    #Then I want to check the length of the array and when it is empty run the above 
    #command, e.g.,

    if [ ${#arr[@]} == 0 ]; then
        cd [path_to_app] && bundle exec thin -C app_config.yml start
    fi

    #wait a bit before checking again
    sleep 30
done

我遇到的第一个问题是我无法将pgrep值存储在数组中,而且我不确定是否可以检查零值。之后我不确定其他代码是否有问题。我希望有人可以帮助我!

1 个答案:

答案 0 :(得分:2)

您忘了执行命令:

arr=($(pgrep -f thin))
  

[...]空的时候

如果您只检查空白,可以直接使用grep的退出状态。

-q, --quiet, --silent
     Quiet;  do  not write anything to standard output.
     Exit immediately with zero status
     if any match is  found,  even  if  an  error  was  detected.