github.com/decred/dcrlnd@v0.7.6/cmd/dcrlnd/main.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "os" 6 7 lnd "github.com/decred/dcrlnd" 8 "github.com/decred/dcrlnd/signal" 9 flags "github.com/jessevdk/go-flags" 10 ) 11 12 func main() { 13 // Hook interceptor for os signals. 14 shutdownInterceptor, err := signal.Intercept() 15 if err != nil { 16 _, _ = fmt.Fprintln(os.Stderr, err) 17 os.Exit(1) 18 } 19 20 // Load the configuration, and parse any command line options. This 21 // function will also set up logging properly. 22 loadedConfig, err := lnd.LoadConfig(shutdownInterceptor) 23 if err != nil { 24 if e, ok := err.(*flags.Error); !ok || e.Type != flags.ErrHelp { 25 // Print error if not due to help request. 26 err = fmt.Errorf("failed to load config: %w", err) 27 _, _ = fmt.Fprintln(os.Stderr, err) 28 os.Exit(1) 29 } 30 31 // Help was requested, exit normally. 32 os.Exit(0) 33 } 34 implCfg := loadedConfig.ImplementationConfig(shutdownInterceptor) 35 36 // Call the "real" main in a nested manner so the defers will properly 37 // be executed in the case of a graceful shutdown. 38 if err = lnd.Main( 39 loadedConfig, lnd.ListenerCfg{}, implCfg, shutdownInterceptor, 40 ); err != nil { 41 _, _ = fmt.Fprintln(os.Stderr, err) 42 os.Exit(1) 43 } 44 }