-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathdaemon.go
62 lines (55 loc) · 1.23 KB
/
daemon.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
//go:build linux || freebsd
// +build linux freebsd
package main
import (
"fmt"
"log"
"log/syslog"
"os"
"time"
)
var xlog *syslog.Writer // Used by mylog
// mylog is a wrapper aroung xlog syslog Writer.
func mylog(txt string, facility string) {
if !usesyslog {
if lerr := log.Output(1, txt); lerr != nil {
fmt.Print("mylog " + lerr.Error())
}
return
}
// we use syslog :
switch facility {
case "Err":
if err := xlog.Err(txt); err != nil {
fmt.Print("mylog " + err.Error())
}
default:
if err := xlog.Info(txt); err != nil {
fmt.Print("mylog " + err.Error())
}
}
}
func initSyslog(exename string) {
if usesyslog {
var err error
xlog, err = syslog.New(syslog.LOG_DAEMON|syslog.LOG_INFO, exename)
if err == nil {
log.SetOutput(xlog)
log.SetFlags(log.Flags() &^ (log.Ldate | log.Ltime)) // remove timestamp
}
} else {
log.SetOutput(os.Stdout)
}
}
func writePidfile(mypidfile string) {
if len(pidfile) == 0 { // Not defined ?
return
}
err := os.WriteFile(mypidfile, []byte(fmt.Sprintf("%d", os.Getpid())), 0o600)
if err != nil {
if lerr := log.Output(1, "Unable to create pidfile "+mypidfile); lerr != nil {
fmt.Print("writePidfile " + lerr.Error())
}
time.Sleep(20 * time.Second)
}
}