crontab 不会运行 go/golang 程序

我已经设置了 crontab 来运行一个编译好的 golang 脚本。该脚本负责将文件夹复制到 ftp。这没有什么特别的。

我只需键入“/backup/main”就可以在命令行中运行该程序,并且一切正常。

现在我想每晚都运行这个程序。我已将 cronjob 设置为每 5 分钟运行一次以测试它是否有效。它没有!

如果我检查系统日志,我可以看到正在调用程序,但没有任何反应。

文件“/backup/main”是chmod a+x crontab设置在“sudo”中(sudo crontab -e)。所以所有权限应该没问题。

crontab 中的行:

*/5 * * * * /备份/主

希望有人可以提供帮助。


缥缈止盈
浏览 379回答 3
3回答

慕娘9325324

希望能帮助像我一样找不到解决方案的人:可以通过向crontab -e文件中添加 path 和 gopath 变量来解决该问题。你可以通过运行找到它们 echo $PATH echo $GOPATHPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/go/bin:/root/binGOPATH=/var/projects/src# +---------------- minute (0 - 59)# |  +------------- hour (0 - 23)# |  |  +---------- day of month (1 - 31)# |  |  |  +------- month (1 - 12)# |  |  |  |  +---- day of week (0 - 6) (Sunday=0)# |  |  |  |  |  */5 * * * * /backup/main由于 go 无法找到包的错误,您的代码可能无法运行即您通过运行go get示例安装的第三个软件包go get gopkg.in/gomail.v2问题是go get您的工作目录中可能有!在我的情况下GOPATH=/var/projects/src你可以看到里面的包裹/your/working_directory/src/pkg/linux_amd64

子衿沉夜

关于 cron 静默失败的传统观点是,它可能是环境造成的。通过将您的 golang 程序包装在一个 shell 脚本中,您可以控制环境(并使您的配置文件运行)。您还可以放入有用的调试位,例如“env”。要使用空环境模拟 cron,请运行:env -i ./myscript.sh其中 myscript.sh 是 chmod +x 并且只运行“env”。然后把你的 golang 命令放在那里,看看它在没有环境的情况下是否仍然有效。然后当你证明它是环境(希望如此)时,在 cron 中使用 shell 脚本。

慕慕森

可能有什么问题,程序打印了一些日志,但是日志会被重定向到/dev/null,你无法查看错误日志。您可以添加它以将日志打印到某个日志文件。*/5 * * * * /backup/main 1>> /path/to/log/file 2>>/path/to/error_log/file
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go