在任何时刻运行最多2个进程

时间:2017-10-12 05:10:27

标签: python shell unix pyspark

我有spark应用程序,我可以为不同的客户端执行。 但我想确保在任何时刻只有2个客户端正在运行,如果一个完成执行,则开始下一次执行。 怎么做到这一点?

example:
spark-submit Prg1.py -t0000 -c123
spark-submit Prg1.py -t0000 -c456
spark-submit Prg1.py -t0000 -c789
spark-submit Prg1.py -t0000 -c012

当我在不同的会话中执行上述4个命令时,我想确保只有2个进程正在运行,剩下的只有在其中一个进程完成时才会启动。

1 个答案:

答案 0 :(得分:0)

请参阅以下shell程序以了解您的要求。 $ USER,如果未设置此环境变量,则输入将要运行以下shell脚本的用户标识。

  1. 创建一个像clients.txt这样的文件,并在其中添加所有客户编号,如下所示 123个
    456个
    789个
    012
  2. 现在创建一个shell脚本文件spark_submit.sh并在其中添加以下行: -

    #!/usr/bin/ksh
    filename="$1"
    total_running_proces=`ps -fu $USER|grep -v "grep"|grep "Prg1.py"| awk '{print $2}'|wc -l`
    if [ $total_running_proces -ge 1 ]; then
       echo "Process is already running"
       exit 0
    fi
    while [ 1 ]
    do
       total_running_proces=`ps -fu $USER|grep -v "grep"|grep "Prg1.py"| awk '{print $2}'|wc -l`
       if [ $total_running_proces -le 1 ]; then
            read -r line
            client=$line
            if [ ${client:-1} -eq 1 ]; then
               break
            else
              spark-submit Prg1.py -t0000 -c$client > /dev/null 2>&1 &
            fi
      fi
      sleep 10 #sleep for 10 second and release the cpu
    done < "$filename"
    exit 0    
    

    现在将此文件设为可执行chmod 777 spark_submit.sh
    现在运行像./spark_submit.sh clients.txt

    这样的程序

    您也可以使用相同的脚本进行不同的处理。您只需更改第5行grep "pgg1.py"和行号12 spark-submit Prg1.py -t0000 -c$client 如果您需要更多帮助,请告诉我。