登录
首页 >  Golang >  Go问答

无法使用 cron 作业运行 Go 应用程序(使用操作系统库)

来源:stackoverflow

时间:2024-04-09 20:39:35 236浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《无法使用 cron 作业运行 Go 应用程序(使用操作系统库)》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

当我尝试使用 cron 作业运行 go 应用程序时遇到问题。似乎操作系统库的每个功能都无法在 cron 作业中执行。这是我的代码。我已经搜索了很多时间,但还没有任何解决方案。

这是我的代码。

package main

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

func main() {
   out, err := exec.command("ls").output()
   file, _ := os.create("test.txt")
   _, err1 := file.write([]byte(string(out) + "\n"))
   if err == nil && err1 == nil {
       fmt.println("test")
   }
   fmt.println(string(out))
}

这是我的 cron 作业

* * * * * go run /root/code/main.go

请帮我解决这个问题或建议使用 cron 作业运行 go 应用程序。


正确答案


默认情况下,cron 作业使用 root 用户运行,并且 root 用户的路径中可能没有 go 二进制文件。 要检查这一点,您可以运行。

# crontab -e
* * * * * whoami >> /tmp/debug.txt && where go && echo OK >> /tmp/debug.txt || echo ERROR >> /tmp/debug.txt

它将向您显示用户信息和“我可以找到二进制文件吗”信息。

您可以更改 runs the cronjob 的用户

更好的方法

正如其他人所说,使用 go run 运行 go 代码并不是一个好主意。每次编译器都需要编译代码并运行它。

如果您运行 go build 并运行生成的可执行文件,它将简化您的工作流程。另外,默认情况下,go 二进制文件是包含所有依赖项的单个二进制文件,这简化了很多事情。您可以在任何地方使用 ./executable-name

到这里,我们也就讲完了《无法使用 cron 作业运行 Go 应用程序(使用操作系统库)》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>