파일에 직접 로깅하는 로거로 교체

This commit is contained in:
2023-06-13 20:03:10 +09:00
parent d490188bd2
commit c1847ee3e1
12 changed files with 116 additions and 77 deletions

View File

@ -2,8 +2,8 @@ package main
import (
"errors"
"fmt"
"io"
"log"
"os"
"os/exec"
"path"
@ -48,23 +48,28 @@ func copy(src, dst string) error {
}
func main() {
logfile, _ := os.OpenFile("replacer.log", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0666)
defer logfile.Close()
stdlog := log.New(logfile, "", log.LstdFlags)
args := os.Args
// args[1] : 나를 시작한 pid. pid가 종료될 때 까지 기다림
// args[2] : target 폴더
// args[3:] : 다시 시작할 때 넘겨줄 arguments(프로세스 이름 포함)
fmt.Println(args)
stdlog.Println(args)
pid, err := strconv.Atoi(args[1])
if err != nil {
panic(err)
stdlog.Fatal(err)
}
proc, err := os.FindProcess(pid)
if err != nil {
panic(err)
stdlog.Fatal(err)
}
proc.Wait()
selfext, _ := os.Executable()
selfext = path.Base(selfext)
entries, _ := os.ReadDir(args[2])
for _, ent := range entries {
@ -74,16 +79,27 @@ func main() {
if ent.IsDir() {
if err := os.MkdirAll(ent.Name(), 0775); err != nil {
panic(err)
stdlog.Fatal(err)
}
} else {
if err := copy(path.Join(args[2], ent.Name()), ent.Name()); err != nil {
panic(err)
stdlog.Println("copy failed :", path.Join(args[2], ent.Name()), ent.Name())
stdlog.Fatal(err)
}
}
}
os.RemoveAll(args[2])
err = os.RemoveAll(args[2])
if err != nil {
stdlog.Println("os.RemoveAll failed :", args[2], err)
}
err = os.Chmod(args[3], 0775)
if err != nil {
stdlog.Println("os.Chmod failed :", err)
}
stdlog.Println("exec.Command :", args)
cmd := exec.Command(args[3], args[4:]...)
cmd.Start()
}