Тема локфайлов уже раскрыта, но это не единственный способ проверить, что скрипт уже запущен.
Например, можно проверять с помощью обертки, умеющей отвечать на запросы по сети. Когда такая обертка стартует второй раз, она рассылает броадкаст (каким образом — зависит от уровня извращенности автора), и слушает ответы.
У лок-файлов есть минус: если скрипт вылетит с ошибкой до того как завершится, то некому будет удалять лок-файл, система вечно будет считать что скрипт работает. С другой стороны, у сетевой обертки такой проблемы нет. Второй плюс — это решение можно в дальнейшем будет расширить на несколько серверов, и менять почти ничего не придется. Основной минус — эту байду придется писать, что займет какое-то время…