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  }