设为首页 加入收藏

TOP

InfluxDB服务器启动流程(一)
2018-01-17 13:05:27 】 浏览:214
Tags:InfluxDB 服务器 启动 流程

go语言版本:1.8.3 linux/amd64


InfluxDB版本:1.1.0


源码路径: github.com/influxdata/influxdb/cmd/influxd


程序入口(main.go):


func main() {
    rand.Seed(time.Now().UnixNano())


    m := NewMain()
    if err := m.Run(os.Args[1:]...); err != nil {
        fmt.Fprintln(os.Stderr, err)
        os.Exit(1)
    }
}


在main函数中,调用Main.Run函数。


如命令行参数为空或"run",则执行如下流程:


case "", "run":
    cmd := run.NewCommand()


    // Tell the server the build details.
    cmd.Version = version
    cmd.Commit = commit
    cmd.Branch = branch


    if err := cmd.Run(args...); err != nil {
        return fmt.Errorf("run: %s", err)
    }


    signalCh := make(chan os.Signal, 1)
    signal.Notify(signalCh, os.Interrupt, syscall.SIGTERM)
    m.Logger.Println("Listening for signals")


    // Block until one of the signals above is received
    select {
    case <-signalCh:
        m.Logger.Println("Signal received, initializing clean shutdown...")
        go func() {
            cmd.Close()
        }()
    }


    // Block again until another signal is received, a shutdown timeout elapses,
    // or the Command is gracefully closed
    m.Logger.Println("Waiting for clean shutdown...")
    select {
    case <-signalCh:
        m.Logger.Println("second signal received, initializing hard shutdown")
    case <-time.After(time.Second * 30):
        m.Logger.Println("time limit reached, initializing hard shutdown")
    case <-cmd.Closed:
        m.Logger.Println("server shutdown completed")
    }


    // goodbye.


执行 Command.Run 函数,后面跟的代码是处理系统信号的相关内容。


Command.Run函数内容如下:


func (cmd *Command) Run(args ...string) error {
    // Parse the command line flags.
    options, err := cmd.ParseFlags(args...)
    if err != nil {
        return err
    }


    // Print sweet InfluxDB logo.
    fmt.Print(logo)


    // Configure default logging.
    log.SetPrefix("[run] ")
    log.SetFlags(log.LstdFlags)


    // Set parallelism.
    runtime.GOMAXPROCS(runtime.NumCPU())


    // Mark start-up in log.
    log.Printf("InfluxDB starting, version %s, branch %s, commit %s",
        cmd.Version, cmd.Branch, cmd.Commit)
    log.Printf("Go version %s, GOMAXPROCS set to %d", runtime.Version(), runtime.GOMAXPROCS(0))


    // Write the PID file.
    if err := cmd.writePIDFile(options.PIDFile); err != nil {
        return fmt.Errorf("write pid file: %s", err)
    }


    // Parse config
    config, err := cmd.ParseConfig(options.GetConfigPath())
    if err != nil {
        return fmt.Errorf("parse config: %s", err)
    }


    // Apply any e

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇MySQL binlog日志存放位置的修改 下一篇关于Oracle开启自动收集统计信息..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目