すでに実行中のプロセスを確認する簡単な方法は、pidof
コマンドです。
if pidof -x "abc.sh" >/dev/null; then
echo "Process already running"
fi
または、スクリプトの実行時に PID ファイルを作成します。次に、プロセスが既に実行されているかどうかを判断するために、PID ファイルの存在を確認する簡単な作業です。
#!/bin/bash
# abc.sh
mypidfile=/var/run/abc.sh.pid
# Could add check for existence of mypidfile here if interlock is
# needed in the shell script itself.
# Ensure PID file is removed on program exit.
trap "rm -f -- '$mypidfile'" EXIT
# Create a file with current PID to indicate that process is running.
echo $$ > "$mypidfile"
...
更新:
質問は、スクリプト自体から確認するように変更されました。この場合、常に少なくとも 1 つのabc.sh
実行が見られると予想されます。が複数ある場合はabc.sh
、プロセスがまだ実行中であることがわかります。pidof
プロセスがすでに実行されている場合は、2 つの PID を返すコマンドの使用をお勧めします。grep
現在の PID を除外したり、シェルでループしたり、wc
複数のプロセスを検出するためにPID をカウントするだけに戻すこともできます。
次に例を示します。
#!/bin/bash
for pid in $(pidof -x abc.sh); do
if [ $pid != $$ ]; then
echo "[$(date)] : abc.sh : Process is already running with PID $pid"
exit 1
fi
done