異なるパラメータを渡して同じプロセスを実行する方法は?

異なるパラメータを渡して同じプロセスを実行する方法は?

次のコマンドを同時に実行しようとしましたが、最初のコマンドのみが機能しましたが、2番目のコマンドは同じプロセスIDによってブロックされました。

sh ./controller.sh $myfile/a.sh start '1' 'today'
sh ./controller.sh $myfile/a.sh start '2' 'early'

コントローラ.sh

progpath=$1
prog=$(basename $progpath)
get_pid() {
    echo "`ps -ef | grep $prog | grep -v grep | grep -v $0 | awk '{print $2}'`"
}
  local pids=$(get_pid)
  if [ -n "$pids" ]; then
    echo "$prog (pid $pids) is already running!"
    return 0
  fi

Controller.shを変更して2つのコマンドを正常に実行するにはどうすればよいですか?

答え1

スクリプトにはいくつかの問題があります。ここでは言及しません。lockfilefromパッケージを使用するより良い方法を提供するにはprocmail

progpath=$1
prog=$(basename "$progpath")

LOCKFILE="/tmp/$prog-$2-$3.lock"
lockfile -r0 "$LOCKFILE" || exit
...
# remove the lockfile when script exits
rm -f "$LOCKFILE"

答え2

prog=$@

pids=$(ps -ef | grep "\"$prog\"" | awk '{print $2}')


if [ -n "$pids" ]; then
    echo "$prog (pid $pids) is already running!"
    return 0
    fi

関連情報