github.com/lologarithm/mattermost-server@v5.3.2-0.20181002060438-c82a84ed765b+incompatible/cmd/mattermost/commands/jobserver.go (about)

     1  // Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
     2  // See License.txt for license information.
     3  
     4  package commands
     5  
     6  import (
     7  	"os"
     8  	"os/signal"
     9  	"syscall"
    10  
    11  	"github.com/mattermost/mattermost-server/mlog"
    12  	"github.com/spf13/cobra"
    13  )
    14  
    15  var JobserverCmd = &cobra.Command{
    16  	Use:   "jobserver",
    17  	Short: "Start the Mattermost job server",
    18  	Run:   jobserverCmdF,
    19  }
    20  
    21  func init() {
    22  	JobserverCmd.Flags().Bool("nojobs", false, "Do not run jobs on this jobserver.")
    23  	JobserverCmd.Flags().Bool("noschedule", false, "Do not schedule jobs from this jobserver.")
    24  
    25  	RootCmd.AddCommand(JobserverCmd)
    26  }
    27  
    28  func jobserverCmdF(command *cobra.Command, args []string) {
    29  	// Options
    30  	noJobs, _ := command.Flags().GetBool("nojobs")
    31  	noSchedule, _ := command.Flags().GetBool("noschedule")
    32  
    33  	// Initialize
    34  	a, err := InitDBCommandContext("config.json")
    35  	if err != nil {
    36  		panic(err.Error())
    37  	}
    38  	defer a.Shutdown()
    39  
    40  	a.LoadLicense()
    41  
    42  	// Run jobs
    43  	mlog.Info("Starting Mattermost job server")
    44  	defer mlog.Info("Stopped Mattermost job server")
    45  
    46  	if !noJobs {
    47  		a.Jobs.StartWorkers()
    48  		defer a.Jobs.StopWorkers()
    49  	}
    50  	if !noSchedule {
    51  		a.Jobs.StartSchedulers()
    52  		defer a.Jobs.StopSchedulers()
    53  	}
    54  
    55  	signalChan := make(chan os.Signal, 1)
    56  	signal.Notify(signalChan, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
    57  	<-signalChan
    58  
    59  	// Cleanup anything that isn't handled by a defer statement
    60  	mlog.Info("Stopping Mattermost job server")
    61  }