Если в скрипте уже используется коннект к Mysql, можно еще использовать его реализацию семафора, не "загрязняя" файловую систему.
Посмотрите на функцию:
GET_LOCK()
Этот метод лишен недостатка, описанного вами. При "умирании" процесса который сделал лок, лок освобождается автоматически.
P,S, Если уж используете файлы, посмотрите
register_shutdown_function(), где можно аварийно удалять лок-файл.