go语言执行grep -v grep爬坑

· · 2245 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

使用go语言的golang.org/x/crypto/ssh包,执行远程机器上的进程检查命令
ps -ef | grep -s buildapp.sh | grep -v grep一直报错

Error: Process exited with status 1

package main import ( "fmt" "github.com/pkg/sftp" "golang.org/x/crypto/ssh" "os" "path" "time" ) func main() { localFile := "/test" remoteDir := "/test/test" user := "wanglulu" pass := "123123" host := "192.168.7.100" port := 22 //创建SSH Client sshClient, err := GetSSHClient(user, pass, host, port) if err != nil { fmt.Println("Error:",err) return } defer sshClient.Close() //创建SSH Session session, err := GetSSHSession(sshClient) if err != nil { fmt.Println("Error:",err) return } defer session.Close() //检查是否有构建任务正在执行 c := `ps -ef | grep -s buildapp.sh | grep -v "grep"` resp, err := session.Output(c) if err != nil { fmt.Println("Error:",err) return } fmt.Println("[INFO]", string(resp)) //创建SSH Session sftpClient, err := GetSFTPClient(sshClient) if err != nil { fmt.Println("Error:",err) return } defer sftpClient.Close() //传输构建APP需要的资源文件 srcFile, err := os.Open(localFile) if err != nil { fmt.Println("Error:",err) return } defer srcFile.Close() remoteFileName := path.Base(localFile) dstFile, err := sftpClient.Create(path.Join(remoteDir, remoteFileName)) if err != nil { fmt.Println("Error:",err) return } defer dstFile.Close() buf := make([]byte, 1024) for { n, _ := srcFile.Read(buf) if n == 0 { break } dstFile.Write(buf[0:n]) } } func GetSSHClient(user, password, host string, port int) (*ssh.Client, error) { var ( auth []ssh.AuthMethod addr string clientConfig *ssh.ClientConfig client *ssh.Client err error ) // get auth method auth = make([]ssh.AuthMethod, 0) auth = append(auth, ssh.Password(password)) clientConfig = &ssh.ClientConfig{ User: user, Auth: auth, HostKeyCallback: ssh.InsecureIgnoreHostKey(), Timeout: 60 * time.Second, } // connect to ssh addr = fmt.Sprintf("%s:%d", host, port) if client, err = ssh.Dial("tcp", addr, clientConfig); err != nil { return nil, err } return client, nil } func GetSFTPClient(sshClient *ssh.Client) (*sftp.Client, error) { var ( sftpClient *sftp.Client err error ) // create sftp client if sftpClient, err = sftp.NewClient(sshClient); err != nil { return nil, err } return sftpClient, nil } func GetSSHSession(sshClient *ssh.Client) (*ssh.Session, error) { var ( session *ssh.Session err error ) // create session if session, err = sshClient.NewSession(); err != nil { return nil, err } return session, nil } 

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:

查看原文:go语言执行grep -v grep爬坑

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2245 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传