欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang代碼中調(diào)用Linux命令

 更新時(shí)間:2023年02月19日 09:47:51   作者:taotaozh  
本文主要介紹了golang代碼中調(diào)用Linux命令,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

傳統(tǒng)方案--crontab

  • 缺點(diǎn)
    • 配置任務(wù)時(shí),需要SSh登錄腳本服務(wù)器進(jìn)行操作
    • 服務(wù)器宕機(jī),任務(wù)將終止調(diào)度,需要人工遷移
    • 排查問題低效,無法方便的查看任務(wù)狀態(tài)與錯(cuò)誤輸出

分布式任務(wù)調(diào)度

  • 優(yōu)點(diǎn)
    • 可視化Web后臺(tái),方便進(jìn)行任務(wù)管理
    • 分布式架構(gòu)、集群化調(diào)度,不存在單點(diǎn)故障
    • 追蹤任務(wù)執(zhí)行狀態(tài),采集任務(wù)輸出,可視化log查看

go執(zhí)行shell命令

  • 1、執(zhí)行程序:/usr/bin/python start.py

  • 2、調(diào)用命令: cat nginx.log | grep "2022"

    • bash模式
      • 交互模式:ls -l
      • 非交互模式:/bin/bash -c "ls -l" ------ 我們使用這個(gè)

實(shí)際我們?cè)趃olang代碼中調(diào)用Linux命令

1、普通調(diào)用

package main

import (
	"fmt"
	"os/exec"
)

var (
	output []byte
	err    error
)

func main() {
	// 要執(zhí)行的命令
	cmd := exec.Command("bash.exe", "-c", "echo 111")

	// CombinedOutput-->捕獲異常跟命令輸出的內(nèi)容
	if output, err = cmd.CombinedOutput(); err != nil {
		fmt.Println("error is :", err)
		return
	}

	// 打印輸出結(jié)果
	fmt.Println(string(output))
}

2、結(jié)合協(xié)程調(diào)用,可控制中斷調(diào)用

package main

import (
	"context"
	"fmt"
	"os/exec"
	"time"
)

// 接收子協(xié)程的數(shù)據(jù),協(xié)程之間用chan通信
type result struct {
	output []byte
	err    error
}

func main() {
	// 執(zhí)行一個(gè)cmd,讓他在一個(gè)攜程里面執(zhí)行2s,
	// 1s的時(shí)候  殺死cmd
	var (
		ctx        context.Context
		cancelFunc context.CancelFunc
		cmd        *exec.Cmd
		resultChan chan *result
		res        *result
	)

	// 創(chuàng)建一個(gè)結(jié)果隊(duì)列
	resultChan = make(chan *result, 1000)

	/*
		1. WithCancel()函數(shù)接受一個(gè) Context 并返回其子Context和取消函數(shù)cancel

		2. 新創(chuàng)建協(xié)程中傳入子Context做參數(shù),且需監(jiān)控子Context的Done通道,若收到消息,則退出

		3. 需要新協(xié)程結(jié)束時(shí),在外面調(diào)用 cancel 函數(shù),即會(huì)往子Context的Done通道發(fā)送消息

		4. 注意:當(dāng) 父Context的 Done() 關(guān)閉的時(shí)候,子 ctx 的 Done() 也會(huì)被關(guān)閉
	*/
	ctx, cancelFunc = context.WithCancel(context.TODO())

	// 起一個(gè)協(xié)程
	go func() {
		var (
			output []byte
			err    error
		)
		// 生成命令
		cmd = exec.CommandContext(ctx, "bash", "-c", "sleep 3;echo hello;")

		// 執(zhí)行命令cmd.CombinedOutput(),且捕獲輸出
		output, err = cmd.CombinedOutput()

		// 用chan跟主攜程通信,把任務(wù)輸出結(jié)果傳給main協(xié)程
		resultChan <- &result{
			err:    err,
			output: output,
		}
	}()

	// Sleep 1s
	time.Sleep(time.Second * 1)

	// 取消上下文,取消子進(jìn)程,子進(jìn)程就會(huì)被干掉
	cancelFunc()

	// 從子協(xié)程中取出數(shù)據(jù)
	res = <-resultChan

	// 打印子協(xié)程中取出數(shù)據(jù)
	fmt.Println(res.err)
	fmt.Println(string(res.output))

}

到此這篇關(guān)于golang代碼中調(diào)用Linux命令的文章就介紹到這了,更多相關(guān)golang調(diào)用Linux命令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang 如何限制木馬圖片上傳服務(wù)器的實(shí)例

    Golang 如何限制木馬圖片上傳服務(wù)器的實(shí)例

    本文主要介紹了Golang 如何限制木馬圖片上傳服務(wù)器的實(shí)例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 解決golang gin框架跨域及注解的問題

    解決golang gin框架跨域及注解的問題

    這篇文章主要介紹了解決golang gin框架跨域及注解的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • golang中json小談之字符串轉(zhuǎn)浮點(diǎn)數(shù)的操作

    golang中json小談之字符串轉(zhuǎn)浮點(diǎn)數(shù)的操作

    這篇文章主要介紹了golang中json小談之字符串轉(zhuǎn)浮點(diǎn)數(shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 基于golang的輕量級(jí)工作流框架Fastflow

    基于golang的輕量級(jí)工作流框架Fastflow

    這篇文章主要介紹了基于golang的輕量級(jí)工作流框架Fastflow,fastflow 執(zhí)行任務(wù)的過程會(huì)涉及到幾個(gè)概念:Dag, Task, Action, DagInstance,本文給大家分享完整流程,需要的朋友可以參考下
    2022-05-05
  • Go select 死鎖的一個(gè)細(xì)節(jié)

    Go select 死鎖的一個(gè)細(xì)節(jié)

    這篇文章主要給大家分享的是Go select 死鎖的一個(gè)細(xì)節(jié),文章先是對(duì)主題提出問題,然后展開內(nèi)容,感興趣的小伙伴可以借鑒一下,希望對(duì)你有所幫助
    2021-10-10
  • Go-RESTful實(shí)現(xiàn)下載功能思路詳解

    Go-RESTful實(shí)現(xiàn)下載功能思路詳解

    這篇文章主要介紹了Go-RESTful實(shí)現(xiàn)下載功能,文件下載包括文件系統(tǒng)IO和網(wǎng)絡(luò)IO,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • Go語言內(nèi)置包的使用

    Go語言內(nèi)置包的使用

    本文主要介紹了Go語言內(nèi)置包的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Golang cron 定時(shí)器和定時(shí)任務(wù)的使用場景

    Golang cron 定時(shí)器和定時(shí)任務(wù)的使用場景

    Ticker是一個(gè)周期觸發(fā)定時(shí)的計(jì)時(shí)器,它會(huì)按照一個(gè)時(shí)間間隔往channel發(fā)送系統(tǒng)當(dāng)前時(shí)間,而channel的接收者可以以固定的時(shí)間間隔從channel中讀取事件,這篇文章主要介紹了Golang cron 定時(shí)器和定時(shí)任務(wù),需要的朋友可以參考下
    2022-09-09
  • Golang 獲取系統(tǒng)信息的實(shí)現(xiàn)

    Golang 獲取系統(tǒng)信息的實(shí)現(xiàn)

    本文主要介紹了Golang 獲取系統(tǒng)信息的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Golang中的參數(shù)傳遞示例詳解

    Golang中的參數(shù)傳遞示例詳解

    參數(shù)傳遞是指在程序的傳遞過程中,實(shí)際參數(shù)就會(huì)將參數(shù)值傳遞給相應(yīng)的形式參數(shù),然后在函數(shù)中實(shí)現(xiàn)對(duì)數(shù)據(jù)處理和返回的過程,下面這篇文章主要給大家介紹了關(guān)于Golang中參數(shù)傳遞的相關(guān)資料,需要的朋友可以參考下。
    2017-09-09

最新評(píng)論