PID='ps -ef | grep ${SCRIPTNAME} | head -n1 | awk ' {print $2;} ''
Isso pode retornar o PID do seu script ou do processo grep
ou de algum processo não relacionado que tenha um nome semelhante. É provável que essa seja a causa do seu problema: às vezes, seu script grava seu próprio PID no pidfile e, às vezes, ele grava outra coisa.
O PID do seu script está na variável $$
.
Para os casos em que você realmente precisa encontrar o PID de um processo que recebe seu nome, consulte Encontrando o ID de um processo e matando-o e grep - por que os parênteses no padrão grep removem o processo do grep dos resultados ps?