Сейчас для блокировки скрипта от повторного запуска применяется файл lock. При некорректном завершении скрипта (например при зависании компьютера), файл остаётся. И повторный запуск уже не возможен, пока вручную не будет удалён файл блокировки. Возможных решений два: 1) Записывать в файл id процесса, и при повторном запуске проверять жив ли этот процесс. 2) Смотреть время создания файла. Если со времени создания прошло 2 или 3 часа, то файл удалять.
Из выше перечисленных мне больше первый вариант нравится. Ещё можно на файл lock ставить блокировку.
Тут ещё проблема с реализацией на питоне. Вариант со временем создания файла реализуется стандартными средствами питона при помощи функции os.stat(). Кроме того, эта функция является кроссплатформенной. А вот для того, чтобы узнать жив ли блокирующий процесс, стандартных средств нет. Можно запустить при помощи os.system() соответствующую комманду shell, а потом парсить её вывод.
Начал реализацию. Вместо запуска 'ps a', и поиска требуемого pid, думаю лучше смотреть напрямую в /proc. Ещё нужно проверять имя программы. Может так получиться, что после загрузки компьютера процесс с таким pid будет существовать, но принадлежать совсем другой программе.
Сделал блокировку через команду 'ps -p id -o comm=', которая сообщает имя процесса.
Теперь появилась новая проблема: При запуске разных скриптов имя процесса может быть разным. Чтобы разные скрипты не работали с репозиторием одновременно, надо как-то учитывать их имена. Исправил. Работает. Для этого в конфиге теперь придётся добавлять имена новых скриптов.