Esempio n. 1
0
func worker() {
	worker := beam.NewWorker(&beam.NetTransport{"tcp", ":6379"}, "/jobs")
	worker.RegisterJob("tty", func(name string, args []string, env map[string]string, streams beam.Streamer, db beam.DB) error {
		p := exec.Command("bash")

		master, slave, err := pty.Open()
		if err != nil {
			return err
		}
		if slave == nil {
			return fmt.Errorf("tty is nil")
		}

		term.SetWinsize(master.Fd(), winsize)

		p.Stdout = slave
		p.Stderr = slave
		p.Stdin = slave
		p.SysProcAttr = &syscall.SysProcAttr{Setctty: true, Setsid: true}

		go streams.ReadFrom(master, "stdout")
		go streams.ReadFrom(master, "stderr")
		go streams.WriteTo(master, "stdin")

		return p.Run()
	})
	worker.Work()
}
Esempio n. 2
0
func worker() {
	worker := beam.NewWorker(&beam.NetTransport{"tcp", ":6379"}, "/jobs")
	worker.RegisterJob("exec", func(name string, args []string, env map[string]string, streams *beam.Streamer, db beam.DB) error {
		var (
			cmdName string
			cmdArgs []string
		)
		if len(args) >= 1 {
			cmdName = args[0]
		} else {
			return fmt.Errorf("Not enough arguments")
		}
		if len(args) > 1 {
			cmdArgs = args[1:]
		}
		p := exec.Command(cmdName, cmdArgs...)

		out := streams.OpenWrite("stdout")
		err := streams.OpenWrite("stderr")
		defer out.Close()
		defer err.Close()

		p.Stdout = out
		p.Stderr = err
		streams.Shutdown()

		return p.Run()
	})
	worker.Work()
}
Esempio n. 3
0
// This is a placeholder for the beam command-line tool.
// It is meant as a convenience to expose capabilities of the protocol and library
// from the command-line.
func main() {
	flag.Parse()
	worker := beam.NewWorker(&beam.NetTransport{"tcp", flag.Arg(0)}, "/jobs")
	worker.RegisterJob("hello", JobHello)
	if err := worker.Work(); err != nil {
		log.Fatal(err)
	}
}