亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

nohup 回到 golang 編程

nohup 回到 golang 編程

Go
慕村9548890 2021-11-22 19:34:42
我們正在嘗試從 golang 執行 nohup 腳本,這是我們執行的命令cmd := exec.Command("nohup","sh",destinationDirPath + "/pf_file_monitor.sh","&>",destinationDirPath + "/nohup.out","&")_,err = cmd.Output();問題是在執行此命令后,控制權沒有返回到程序。任何人都可以幫助我嗎?
查看完整描述

1 回答

?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

所以似乎有一些事情正在絆倒。我已經重寫了下面的代碼,但讓我首先明確地解決每個問題,以便我可以解釋我認為的混淆是什么并解釋我的更改:

  • destinationDirPath + "/pf_file_monitor.sh"- 這在技術上沒有錯,但使用起來更慣用(也更可靠)filepath.Join;作為一般規則,除非有充分的理由,否則永遠不應該對路徑進行手動字符串連接

  • $>- 我假設您在這里嘗試做的是將命令的輸出重定向到日志文件。這里的問題是該符號$>僅在您處于 shell 中時才有意義(例如shbash)。另一方面,Go 只是將其視為另一個命令行參數,并將其作為參數傳遞給程序。因此,您將不得不手動執行此操作。在我下面給出的示例中,我所做的是打開文件,然后將cmd的 stdout 和 stderr 管道(這些是io.Writer控制 stdout 和 stderr 去向的 s )設置為文件句柄。

  • 它不會在后臺運行。這里的問題是您正在使用該Run方法,它將運行命令并阻塞直到它完成。相反Start,您需要該方法,該方法僅啟動命令然后立即返回,以便您的程序可以繼續運行。

希望這可以幫助!這是更新的實現:

script := filepath.Join(destinationDirPath, "pf_file_monitor.sh")

log := filepath.Join(destinationDirPath, "nohup.out")

cmd := exec.Command("nohup", "sh", script)


f, err := os.Create(log)

if err != nil {

    // handle error

}


// redirect both stdout and stderr to the log file

cmd.Stdout = f

cmd.Stderr = f


// start command (and let it run in the background)

err = cmd.Start()

if err != nil {

    // handle error

}


查看完整回答
反對 回復 2021-11-22
  • 1 回答
  • 0 關注
  • 457 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號