Você pode usar um bloqueio que permanece na memória (geralmente / tmp é uma montagem tmpfs) que será removida na inicialização:
[ ! -f /tmp/rc.local.lock ]&&touch /tmp/rc.local.lock||exit
Acho que o problema é que você não tem o mesmo ambiente disponível em seu script em comparação com o shell ssh (por exemplo, PATH ...). Você deve gravar a saída do script em um arquivo de log. Basta adicionar esta linha no início do script.
exec >/tmp/rc.local.log 2>&1