MCPcopy Index your code
hub / github.com/wavetermdev/waveterm / daemonize

Function daemonize

pkg/jobmanager/jobmanager_unix.go:20–63  ·  view source on GitHub ↗
(clientId string, jobId string)

Source from the content-addressed store, hash-verified

18)
19
20func daemonize(clientId string, jobId string) error {
21 _, err := unix.Setsid()
22 if err != nil {
23 return fmt.Errorf("failed to setsid: %w", err)
24 }
25
26 devNull, err := os.OpenFile("/dev/null", os.O_RDWR, 0)
27 if err != nil {
28 return fmt.Errorf("failed to open /dev/null: %w", err)
29 }
30 err = unix.Dup2(int(devNull.Fd()), int(os.Stdin.Fd()))
31 if err != nil {
32 return fmt.Errorf("failed to dup2 stdin: %w", err)
33 }
34 devNull.Close()
35
36 logPath := wavebase.GetRemoteJobFilePath(jobId, "log")
37 logDir := filepath.Dir(logPath)
38 err = os.MkdirAll(logDir, 0700)
39 if err != nil {
40 return fmt.Errorf("failed to create log directory: %w", err)
41 }
42
43 logFile, err := os.OpenFile(logPath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0600)
44 if err != nil {
45 return fmt.Errorf("failed to open log file: %w", err)
46 }
47 err = unix.Dup2(int(logFile.Fd()), int(os.Stdout.Fd()))
48 if err != nil {
49 return fmt.Errorf("failed to dup2 stdout: %w", err)
50 }
51 err = unix.Dup2(int(logFile.Fd()), int(os.Stderr.Fd()))
52 if err != nil {
53 return fmt.Errorf("failed to dup2 stderr: %w", err)
54 }
55
56 log.SetOutput(logFile)
57 log.Printf("job manager daemonized, logging to %s\n", logPath)
58 log.Printf("job owner clientid: %s\n", clientId)
59
60 signal.Ignore(syscall.SIGHUP)
61
62 return nil
63}

Callers 1

SetupJobManagerFunction · 0.70

Calls 3

GetRemoteJobFilePathFunction · 0.92
FdMethod · 0.80
CloseMethod · 0.65

Tested by

no test coverage detected