Files
tecamino-proccessSupervisor/models/supervisor.go
2025-08-05 17:17:55 +02:00

58 lines
1.3 KiB
Go

package models
import (
"encoding/json"
"fmt"
"os"
"os/exec"
"sort"
)
type Supervisor struct {
Processes []*SupervisorProcess `json:"processes"`
}
type SupervisorProcess struct {
Name string `json:"name"`
ExecutePath string `json:"executePath"`
WorkingDirectory string `json:"workingDirectory,omitempty"`
StartDelay int `json:"startDelay,omitempty"`
Priority int `json:"priority,omitempty"`
Arguments []string `json:"arguments,omitempty"`
process *exec.Cmd `json:"-"`
}
func ReadTemplate(path string) (supervisor Supervisor, err error) {
content, err := os.ReadFile(path)
if err != nil {
return
}
err = json.Unmarshal(content, &supervisor)
return
}
func (s *Supervisor) StartProcesses() error {
sort.Slice(s.Processes, func(i, j int) bool {
return s.Processes[i].Priority < s.Processes[j].Priority
})
for _, p := range s.Processes {
go func() {
p.process = exec.Command(p.ExecutePath, p.Arguments...)
//cmd.Env = append(cmd.Env, "MY_VAR=some_value")
p.process.Dir = p.WorkingDirectory
output, err := p.process.Output()
if err != nil {
fmt.Println("Error:", err)
}
fmt.Println("Output:", string(output))
}()
}
fmt.Println(3)
return nil
}