Sorry for my poor english ;)
I need to check if a script is already running or not. I don't want to use a lock file, as it can be tricky (ie: if my script wrote a lock file, but crashed, I will consider it as running). I also need to take parameters into account. ie: test.sh 123 should be considered as a different process than test.sh 456
I tried this :
#!/bin/bash echo "inside test.sh, script name with arguments: $0 +$*$" echo " simple pgrep on script name with arguments:" pgrep -f "$0 +$*$" echo " counting simple pgrep on script name with arguments with wc -l" echo $(pgrep -f "$0 +$*$" | wc -l) echo " counting pgrep echo result with wc -w" processes=$(pgrep -f "$0 +$*$") nbProcesses=$(echo $processes | wc -w) echo $nbProcesses sleep 300 When I try, I get this result:
[frederic.charrier@charrier tmp]$ /tmp/test.sh 123 inside test.sh, script name with arguments: /tmp/test.sh +123$ simple pgrep on script name with arguments: 123976 counting simple pgrep on script name with arguments with wc -l 2 counting pgrep echo result with wc -w 1 ^Z [1]+ Stoppé /tmp/test.sh 123 [frederic.charrier@charrier tmp]$ /tmp/test.sh 123 inside test.sh, script name with arguments: /tmp/test.sh +123$ simple pgrep on script name with arguments: 123976 124029 counting simple pgrep on script name with arguments with wc -l 3 counting pgrep echo result with wc -w 2 My questions are:
- when I run the script the first time, it's running once. So pgrep is returning only one result: 123976, which is fine. But why a "wc -l" on 123976 is returning 2?
- when I run the script a second time, I get the same strange behavior: pgrep returns the correct result, pgrep | wc -l returns something wrong, and "echo pgrep ... | wc -w" returns the correct result. Why?
psand you can avoid it by using| grep -v grepto exclude the PIDs from grep commands.pgreporwc, I cannot tell.