고로 간단한 문지기 프로그램 쓰기(WatchDog)
회사의 일부 작은 프로그램은 임시로 사용하기 때문에 (업데이트를 유지하지 않기 때문에) 어떤 버그는 붕괴를 초래할 수 있지만, 심각하지는 않기 때문에 붕괴되면 다시 시작하면 된다.그래서 문지기 프로그램을 써서 프로그램을 감시하고 끊었다(프로그램의 다른 상태에 관심이 없기 때문에) 바로 다시 시작합니다.
참고: 소프트웨어 문지기 프로그램
코드
package main
import (
"fmt"
"log"
"os"
"os/exec"
"os/signal"
"path/filepath"
"syscall"
)
func main() {
argc := len(os.Args)
if argc < 2 {
fmt.Println("Usage:", os.Args[0], " pragram args...")
return
}
workdir, err := os.Getwd()
if err != nil {
fmt.Println(" ", err.Error())
}
name := os.Args[1]
args := os.Args[1:]
{
if filepath.Base(name) == name {
if lp, err := exec.LookPath(name); err != nil {
log.Println(" ", err.Error())
return
} else {
name = lp
}
}
}
log.Println(" :", workdir)
var cmdline string
for _, arg := range args {
cmdline += arg + " "
}
log.Println(" :", cmdline)
var cmd *exec.Cmd
// chan
c := make(chan os.Signal)
// ctrl+c kill
signal.Notify(c, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT)
go func() {
for s := range c {
switch s {
case syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT:
log.Println(" ", s)
err = cmd.Process.Kill()
if err != nil {
log.Println(" :", err.Error())
}
os.Exit(0)
}
}
}()
for {
cmd = &exec.Cmd{
Path: name,
Args: args,
Dir: workdir,
Stdin: os.Stdin,
Stdout: os.Stdout,
Stderr: os.Stderr,
}
// log.Println(cmd.Args)
err = cmd.Run()
if err != nil {
log.Println(" :", err.Error())
err = cmd.Process.Kill()
if err != nil {
log.Println(" :", err.Error())
}
log.Println(" ")
continue
}
exitcode := cmd.ProcessState.ExitCode()
if exitcode != 0 {
log.Println(" :", exitcode)
log.Println(" ")
continue
}
break
}
log.Println(" ")
}
전재 대상:https://www.cnblogs.com/oloroso/p/11417804.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.