![다른 매개변수를 전달하여 동일한 프로세스를 실행하는 방법은 무엇입니까?](https://linux55.com/image/96808/%EB%8B%A4%EB%A5%B8%20%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%A0%84%EB%8B%AC%ED%95%98%EC%97%AC%20%EB%8F%99%EC%9D%BC%ED%95%9C%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EB%A5%BC%20%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
다음 명령을 동시에 실행하려고 시도했지만 첫 번째 명령만 작동하지만 두 번째 명령은 동일한 프로세스 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
스크립트에 몇 가지 문제가 있습니다. 여기에는 언급하지 않겠습니다. lockfile
from 패키지를 사용하는 더 나은 방법을 제공하기 위해 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