为了账号安全,请及时绑定邮箱和手机立即绑定

crontab 不会运行 go/golang 程序

crontab 不会运行 go/golang 程序

Go
缥缈止盈 2021-11-22 19:35:39
我已经设置了 crontab 来运行一个编译好的 golang 脚本。该脚本负责将文件夹复制到 ftp。这没有什么特别的。我只需键入“/backup/main”就可以在命令行中运行该程序,并且一切正常。现在我想每晚都运行这个程序。我已将 cronjob 设置为每 5 分钟运行一次以测试它是否有效。它没有!如果我检查系统日志,我可以看到正在调用程序,但没有任何反应。文件“/backup/main”是chmod a+x crontab设置在“sudo”中(sudo crontab -e)。所以所有权限应该没问题。crontab 中的行:*/5 * * * * /备份/主希望有人可以提供帮助。
查看完整描述

3 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

希望能帮助像我一样找不到解决方案的人:


可以通过向crontab -e文件中添加 path 和 gopath 变量来解决该问题。


你可以通过运行找到它们 echo $PATH echo $GOPATH


PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/go/bin:/root/bin

GOPATH=/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


查看完整回答
反对 回复 2021-11-22
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

关于 cron 静默失败的传统观点是,它可能是环境造成的。通过将您的 golang 程序包装在一个 shell 脚本中,您可以控制环境(并使您的配置文件运行)。您还可以放入有用的调试位,例如“env”。

要使用空环境模拟 cron,请运行:

env -i ./myscript.sh

其中 myscript.sh 是 chmod +x 并且只运行“env”。然后把你的 golang 命令放在那里,看看它在没有环境的情况下是否仍然有效。然后当你证明它是环境(希望如此)时,在 cron 中使用 shell 脚本。


查看完整回答
反对 回复 2021-11-22
?
慕慕森

TA贡献1856条经验 获得超17个赞

可能有什么问题,程序打印了一些日志,但是日志会被重定向到/dev/null,你无法查看错误日志。您可以添加它以将日志打印到某个日志文件。

*/5 * * * * /backup/main 1>> /path/to/log/file 2>>/path/to/error_log/file


查看完整回答
反对 回复 2021-11-22
  • 3 回答
  • 0 关注
  • 378 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信