首页 > 解决方案 > 是否有类似“超时”的功能可以跳过命令而不是杀死它?

问题描述

我写了一个无限的while循环来运行4个脚本,一次两个,但是当一个脚本执行时它等待它完成,而不是循环。

while true; do
    script1.sh & script2.sh
    script3.sh & script4.sh
done

这次我添加了超时,它杀死了一个活动脚本。通常每个脚本运行一个小时。

标签: bashshellsh

解决方案


我已经通过添加一个PID防止活动脚本再次运行来修复它,每个脚本都添加了这个

    PIDFILE=$pid.pd
    if [ -f $PIDFILE ]
    then
      PID=$(cat $PIDFILE)
      ps -p $PID > /dev/null 2>&1
      if [ $? -eq 0 ]
      then
        echo "Process already running"
        exit 1
      else
        ## rocess not found assume not running
        echo $$ > $PIDFILE
        if [ $? -ne 0 ]
        then
          echo "Could not create PID file"
          exit 1
        fi
      fi
    else
      echo $$ > $PIDFILE
      if [ $? -ne 0 ]
      then
        echo "Could not create PID file"
        exit 1
      fi
    fi

    //insert commands here

    rm $PIDFILE

并通过使用在后台运行每个脚本&

while true; do
    script1.sh & script2.sh &
    sleep 1.5
    script3.sh & script4.sh &
    sleep 1.5
done

sleep用于 CPU 处理。感谢乔纳森和查尔斯。


推荐阅读