github.com/mattermosttest/mattermost-server/v5@v5.0.0-20200917143240-9dfa12e121f9/cmd/mattermost/commands/jobserver.go (about)

     1  // Copyright (c) 2015-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/v5/audit"
    12  	"github.com/mattermost/mattermost-server/v5/mlog"
    13  	"github.com/mattermost/viper"
    14  	"github.com/spf13/cobra"
    15  )
    16  
    17  var JobserverCmd = &cobra.Command{
    18  	Use:   "jobserver",
    19  	Short: "Start the Mattermost job server",
    20  	RunE:  jobserverCmdF,
    21  }
    22  
    23  func init() {
    24  	JobserverCmd.Flags().Bool("nojobs", false, "Do not run jobs on this jobserver.")
    25  	JobserverCmd.Flags().Bool("noschedule", false, "Do not schedule jobs from this jobserver.")
    26  
    27  	RootCmd.AddCommand(JobserverCmd)
    28  }
    29  
    30  func jobserverCmdF(command *cobra.Command, args []string) error {
    31  	// Options
    32  	noJobs, _ := command.Flags().GetBool("nojobs")
    33  	noSchedule, _ := command.Flags().GetBool("noschedule")
    34  
    35  	config := viper.GetString("config")
    36  
    37  	// Initialize
    38  	a, err := InitDBCommandContext(config)
    39  	if err != nil {
    40  		return err
    41  	}
    42  	defer a.Srv().Shutdown()
    43  
    44  	a.Srv().LoadLicense()
    45  	a.InitServer()
    46  
    47  	// Run jobs
    48  	mlog.Info("Starting Mattermost job server")
    49  	defer mlog.Info("Stopped Mattermost job server")
    50  
    51  	if !noJobs {
    52  		a.Srv().Jobs.StartWorkers()
    53  		defer a.Srv().Jobs.StopWorkers()
    54  	}
    55  	if !noSchedule {
    56  		a.Srv().Jobs.StartSchedulers()
    57  		defer a.Srv().Jobs.StopSchedulers()
    58  	}
    59  
    60  	if !noJobs || !noSchedule {
    61  		auditRec := a.MakeAuditRecord("jobServer", audit.Success)
    62  		a.LogAuditRec(auditRec, nil)
    63  	}
    64  
    65  	signalChan := make(chan os.Signal, 1)
    66  	signal.Notify(signalChan, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
    67  	<-signalChan
    68  
    69  	// Cleanup anything that isn't handled by a defer statement
    70  	mlog.Info("Stopping Mattermost job server")
    71  
    72  	return nil
    73  }