Added file check

This commit is contained in:
Magnus Root 2026-04-15 17:28:15 +03:00
parent c035c7f597
commit 130203c778

34
main.go
View file

@ -19,13 +19,43 @@ func main() {
// Lock-файл для предотвращения параллельного запуска
// ════════════════════════════════════════════════════════════
lockFile := "/var/lock/ptaf-main.lock"
const maxLockAge = 15 * time.Minute
f, err := os.OpenFile(lockFile, os.O_CREATE|os.O_EXCL|os.O_RDWR, 0600)
if err != nil {
if os.IsExist(err) {
log.Fatal("❌ Программа уже запущена! Lock файл существует: ", lockFile)
data, readErr := os.ReadFile(lockFile)
if readErr == nil {
var existingPID int
if _, parseErr := fmt.Sscanf(strings.TrimSpace(string(data)), "%d", &existingPID); parseErr == nil && existingPID > 0 {
// Проверяем существует ли процесс
if _, procErr := os.Stat(fmt.Sprintf("/proc/%d", existingPID)); os.IsNotExist(procErr) {
log.Printf("⚠ Lock файл найден но процесс PID %d не существует — удаляем устаревший lock", existingPID)
os.Remove(lockFile)
f, err = os.OpenFile(lockFile, os.O_CREATE|os.O_EXCL|os.O_RDWR, 0600)
if err != nil {
log.Fatal("❌ Не удалось создать lock файл после очистки: ", err)
}
} else {
// Процесс существует — проверяем возраст lock-файла
if info, statErr := os.Stat(lockFile); statErr == nil {
age := time.Since(info.ModTime())
if age > maxLockAge {
log.Printf("⚠ Программа уже запущена (PID %d) но работает более %.0f минут — возможно зависла", existingPID, age.Minutes())
log.Printf(" Если утилита зависла, выполните: kill %d && rm %s", existingPID, lockFile)
}
}
log.Fatalf("❌ Программа уже запущена! PID: %d, Lock файл: %s", existingPID, lockFile)
}
} else {
log.Fatal("❌ Программа уже запущена! Lock файл существует: ", lockFile)
}
} else {
log.Fatal("❌ Программа уже запущена! Lock файл существует: ", lockFile)
}
} else {
log.Fatal("❌ Не удалось создать lock файл: ", err)
}
log.Fatal("❌ Не удалось создать lock файл: ", err)
}
pid := os.Getpid()