A melhor solução é descobrir por que seu script está sendo chamado duas vezes. O rc.local está sendo chamado duas vezes ou o script está sendo iniciado de outro local? Você poderia tentar adicionar um pouco de log ao rc.local para ver se é de fato o que está sendo chamado duas vezes. Por exemplo,
date >/var/tmp/rc.local.log
/path/to/script.sh &
exit 0
Se você não conseguir rastrear por que seu script está sendo iniciado duas vezes, a outra opção é criar um arquivo de bloqueio para seu script. Isso deve entrar em um sistema de arquivos tmpfs, então ele desaparecerá na reinicialização. Adicione algo assim ao topo do seu script.
test -f /var/run/script.sh.pid && exit 0
echo $$ >/var/run/script.sh.pid
Dessa forma, se o /var/run/script.sh.pid
existir, o script será encerrado. Caso contrário, ele cria e continua a executá-lo. Esta solução está sujeita a corridas, mas pode ser suficiente para contornar o problema.