我正在尝试执行两个命令:
sudo ip link set can0 type can bitrate 500000
sudo ip link set can type can restart-ms 1000
这是我的代码:
package main
import (
"log"
"os"
"os/exec"
)
func main(/*in string*/)/*(out bool)*/ {
in :="setup"
switch in {
case "setup":
bringUp()
setRestart()
log.Println("can0 is brought up")
//return true
case "restart":
setRestart()
log.Println("can0 is restarted")
//return true
default:
log.Println("System cannot be brought up, contact administrator")
//return false
}
}
func bringUp (){
cmd := exec.Command("sh", "-c", "sudo ip link set can0 type can bitrate 500000")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err := cmd.Run()
if err != nil {
log.Fatal(err)
}
}
func setRestart(){
cmd:= exec.Command("sh", "-c", "sudo ip link set can type can restart-ms 10000")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err := cmd.Run()
if err != nil{
log.Fatal(err)
}
}
无论何时执行,都会进入“设置”的情况并开始执行BringUp函数,但是它永远无法完成执行,我也不明白为什么。我正在研究树莓派。
答案 0 :(得分:3)
您的执行代码看起来正确。我认为问题在于sudo
。我用sudo touch /tmp/bringUp-executed
等良性命令替换了您的命令。代码确实提示输入我的sudo密码-但一旦输入-完全没有问题。
您是否以无头方式运行go-executable?因此无法访问控制台进行密码输入吗?我建议为您的任何根级任务创建包装器脚本,并为它们提供无密码的sudoer
特权,如here所述。