github.com/qichengzx/mattermost-server@v4.5.1-0.20180604164826-2c75247c97d0+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 if !noJobs { 45 a.Jobs.StartWorkers() 46 } 47 if !noSchedule { 48 a.Jobs.StartSchedulers() 49 } 50 51 signalChan := make(chan os.Signal, 1) 52 signal.Notify(signalChan, os.Interrupt, syscall.SIGINT, syscall.SIGTERM) 53 <-signalChan 54 55 // Cleanup anything that isn't handled by a defer statement 56 mlog.Info("Stopping Mattermost job server") 57 58 a.Jobs.StopSchedulers() 59 a.Jobs.StopWorkers() 60 61 mlog.Info("Stopped Mattermost job server") 62 }