最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

  • 缺點(diǎn)
    • 配置任務(wù)時(shí),需要SSh登錄腳本服務(wù)器進(jìn)行操作
    • 服務(wù)器宕機(jī),任務(wù)將終止調(diào)度,需要人工遷移
    • 排查問(wèn)題低效,無(wú)法方便的查看任務(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實(shí)現(xiàn)短網(wǎng)址/短鏈服務(wù)的開(kāi)發(fā)筆記分享

    Golang實(shí)現(xiàn)短網(wǎng)址/短鏈服務(wù)的開(kāi)發(fā)筆記分享

    這篇文章主要為大家詳細(xì)介紹了如何使用Golang實(shí)現(xiàn)短網(wǎng)址/短鏈服務(wù),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2023-05-05
  • 一文帶你徹底搞懂 Golang 中的方法(Methods)

    一文帶你徹底搞懂 Golang 中的方法(Methods)

    Golang 支持一些類(lèi)似面向?qū)ο缶幊痰奶匦?,方法就其中之一,本文將詳?xì)介紹 Golang 中方法相關(guān)的知識(shí),感興趣的小伙伴跟著小編一起來(lái)學(xué)習(xí)吧
    2023-07-07
  • go語(yǔ)言中GoMock安裝使用詳解

    go語(yǔ)言中GoMock安裝使用詳解

    這篇文章主要為大家介紹了go語(yǔ)言中GoMock安裝使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 詳解golang碎片整理之 fmt.Scan

    詳解golang碎片整理之 fmt.Scan

    本文介紹了從golang語(yǔ)言中fmt包從標(biāo)準(zhǔn)輸入獲取數(shù)據(jù)的Scan系列函數(shù)、從io.Reader中獲取數(shù)據(jù)的Fscan系列函數(shù)以及從字符串中獲取數(shù)據(jù)的Sscan系列函數(shù)的用法,感興趣的小伙伴們可以參考一下
    2019-05-05
  • golang中的時(shí)間格式化

    golang中的時(shí)間格式化

    這篇文章主要介紹了golang中的時(shí)間格式化問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • go語(yǔ)言中Timer和Ticker兩種計(jì)時(shí)器的使用

    go語(yǔ)言中Timer和Ticker兩種計(jì)時(shí)器的使用

    go語(yǔ)言中有Timer和Ticker這樣的兩種計(jì)時(shí)器,兩種計(jì)時(shí)器分別實(shí)現(xiàn)了不同的計(jì)時(shí)功能,本文主要介紹了go語(yǔ)言中Timer和Ticker兩種計(jì)時(shí)器的使用,感興趣的可以了解一下
    2024-08-08
  • golang線(xiàn)程安全的map實(shí)現(xiàn)

    golang線(xiàn)程安全的map實(shí)現(xiàn)

    這篇文章主要介紹了golang線(xiàn)程安全的map實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-03-03
  • 使用Go實(shí)現(xiàn)優(yōu)雅重啟服務(wù)功能

    使用Go實(shí)現(xiàn)優(yōu)雅重啟服務(wù)功能

    這篇文章主要介紹了如何使用Go來(lái)實(shí)現(xiàn)優(yōu)雅重啟服務(wù),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Go用兩個(gè)協(xié)程交替打印100以?xún)?nèi)的奇偶數(shù)的方法詳解

    Go用兩個(gè)協(xié)程交替打印100以?xún)?nèi)的奇偶數(shù)的方法詳解

    這篇文章主要給大家詳細(xì)介紹了Go用兩個(gè)協(xié)程交替打印100以?xún)?nèi)的奇偶數(shù)的示例代碼,文中給大家介紹了兩個(gè)實(shí)現(xiàn)方法,使用無(wú)緩沖的channel和設(shè)置GOMAXPROCS=1,介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • 一文探索Go中的函數(shù)使用方式

    一文探索Go中的函數(shù)使用方式

    在編程中,函數(shù)是基本構(gòu)建塊之一,Go語(yǔ)言以其簡(jiǎn)潔明了的函數(shù)定義和調(diào)用語(yǔ)法而聞名,所以本文就來(lái)和大家聊聊Go中的函數(shù)概念及使用,感興趣的可以了解下
    2023-09-09

最新評(píng)論

天门市| 阳西县| 通州区| 山东| 临泉县| 成都市| 台州市| 洞头县| 永平县| 吴忠市| 读书| 永城市| 玉环县| 崇州市| 金川县| 谷城县| 揭东县| 米脂县| 荣昌县| 赣州市| 小金县| 山丹县| 兴国县| 仁化县| 满城县| 根河市| 乐业县| 北辰区| 武邑县| 石楼县| 秦皇岛市| 德化县| 南通市| 武义县| 虹口区| 勐海县| 石门县| 攀枝花市| 仁布县| 科技| 社会|