golang 在后台执行shell命令,在单独的go例程中运行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 在后台执行shell命令,在单独的go例程中运行相关的知识,希望对你有一定的参考价值。

package main

import (
	"fmt"
	"log"
	"os"
	"os/exec"
)

type Data struct {
	output []byte
	error  error
}

func runCommand(ch chan<- Data) {
	cmd := exec.Command("ls", "-la")
	data, err := cmd.CombinedOutput()
	ch <- Data{
		error:  err,
		output: data,
	}
}

func main() {
	c := make(chan Data)

	// This will work in background
	go runCommand(c)

	// Do other things here

	// When everything is done, you can check your background process result
	res := <-c
	if res.error != nil {
		fmt.Println("Failed to execute command: ", res.error)
	} else {
		// You will be here, runCommand has finish successfuly
		f, err := os.Create("output.txt")
		if err != nil {
			log.Fatal(err)
		}

		_, err = f.Write(res.output)
		if err != nil {
			log.Fatal(err)
		}
	}
}

shell后台执行命令-crontab

名词解释:

cron 系统调度进程,可通过它按照一定的时间间隔或固定的时间点运行作业

&   使用它在后台运行一个占用时间不长的进程

注:

cron是系统的调度进程,可在无人干预的情况下运行作业,通过crontab的命令允许用户提交,编辑或删除相应的作业。

每个用户都有一个crontab文件来保存作业调度信息,通过该命令运行任意一个shell脚本或命令

在大的系统中,系统管理员可以通过cron.deny和cron.allow这两个文件来禁止或允许用户拥有自己的crontab文件。

crontab格式:分 时 日 月 星期 要运行的命令

        * * * * * 

crontab的域: 第1列    分钟1-59

         第2列    小时1-23(0表示子夜)

         第3列    日1-31

        第4列    月1-12

         第5列    星期0-6(0表示星期天)

         第6列    要运行的命令

crontab的命令选项:

格式:crontab [-u user] -e -l -r

    -u 用户名

    -e 编辑crontab文件

    -l 列出crontab文件中的内容

    -r 删除crontab文件

  • 创建一个新的crontab文件:

    修改$HOME目录下的.bash_profile文件,加入环境变量

    EDITOR=vi;export EDITOR //注:修改后重新登录

  • 删除crontab文件

    $crontab -r 

  • crontab文件的恢复

    如果误删除了crontab文件,假设在$HOME目录下还有备份,可以将这个备份文件拷贝到/var/spool/cron/<username> username是用户名,如果由于权限问题无法拷贝,可以使用

    $crontab <filename>

    note: filename是备份的crontab文件的名字

  • crontab的重启

    $crond stop

    $crond start

    

以上是关于golang 在后台执行shell命令,在单独的go例程中运行的主要内容,如果未能解决你的问题,请参考以下文章

shell 判断后台是不是有任务执行 fg

Linux下使Shell 命令脱离终端在后台运行

shell后台执行命令-crontab

Golang 在 Linux CentOS 6.5 服务器上实现 博客后台程序开机启动

linux shell脚本执行命令时创建子进程问题(特定的情况,例如后台运行管道分支或子shell等,脚本可能会创建子进程执行命令)

linux shell脚本执行命令时创建子进程问题(特定的情况,例如后台运行管道分支或子shell等,脚本可能会创建子进程执行命令)