Added file check
This commit is contained in:
parent
c035c7f597
commit
130203c778
1 changed files with 32 additions and 2 deletions
34
main.go
34
main.go
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue