49 lines
1.0 KiB
Go
49 lines
1.0 KiB
Go
package deploy
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"path/filepath"
|
|
"time"
|
|
|
|
"crypto-miner-agent/config"
|
|
)
|
|
|
|
const guardFlag = "--guard"
|
|
|
|
// IsGuardMode reports whether this process is the out-of-process watchdog only.
|
|
func IsGuardMode() bool {
|
|
for _, arg := range os.Args[1:] {
|
|
if arg == guardFlag {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// RunGuardLoop watches the installed worker and restarts it silently if it exits.
|
|
// Runs until the guard process is killed (no PowerShell loop).
|
|
func RunGuardLoop(cfg config.RuntimeConfig) {
|
|
installDir, err := cfg.InstallDirectory()
|
|
if err != nil {
|
|
return
|
|
}
|
|
binPath := filepath.Join(installDir, BinaryName(cfg))
|
|
procName := BinaryName(cfg)
|
|
|
|
log.Printf("[guard] watching %s", procName)
|
|
ticker := time.NewTicker(60 * time.Second)
|
|
defer ticker.Stop()
|
|
for range ticker.C {
|
|
if workerProcessRunning(procName) {
|
|
continue
|
|
}
|
|
if _, err := os.Stat(binPath); err != nil {
|
|
continue
|
|
}
|
|
if err := relaunch(binPath, ""); err != nil {
|
|
log.Printf("[guard] relaunch failed: %v", err)
|
|
}
|
|
}
|
|
}
|