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 }