go 在crontab里面运行报错 解决方案

Posted mysticbinary

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go 在crontab里面运行报错 解决方案相关的知识,希望对你有一定的参考价值。

问题背景

你高高兴兴的写好了一个go脚本,放到你的服务器上,打算定期运行这个脚本,你打开crontab -e,
然后输入:

*/1 * * * * go run /root/test/main.go

然后发现迟迟没有反应,你就查看一下输出什么错误:

*/1 * * * * go run /root/test/main.go >> /root/test/log.txt

然后报错如下:

build command-line-arguments: cannot load test/mypath: malformed module path "test/mypath": missing dot in first path element

missing dot in first path element ? What ? 你会好奇,你明明使用了:

go mod init test
go mod tidy

然后你测试了一下,如果cd /root/test/,然后run 是非常正常的,
一旦在非/root/test/目录下,就会出现这种路径报错问题,

类似的问题还有:

?  root go run /Users/thoth/program/gocode/alarm15m/main.go 
alarm15m/main.go:12:2: package alarm15m/mypath is not in GOROOT (/usr/local/go/src/alarm15m/mypath)
alarm15m/main.go:13:2: package alarm15m/tools is not in GOROOT (/usr/local/go/src/alarm15m/tools)

Xxx is not in GOROOT , 总是在导包上出问题!
这b玩意,为啥这样,我也不知道,我也不想研究他(每天的学习任务安排很满,我觉得这种就是特定语言特定的场景没必要,通识性知识才是重要的,这种Xxx语言我一天就会切换3~4种,很难每个都去研究,完成任务就好),估计就是有他路径设置的考虑,管他呢,反正有一点确定的就是在项目路径下执行一定是成功的,基于这个很确定的点,我想到一些曲线救国方案。


解决

直接写sh脚本
run.sh

#!/bin/sh  
cd /root/test/
go run main.go

crontab -e

*/15 * * * * bash /root/test/run.sh

完美解决。






以上是关于go 在crontab里面运行报错 解决方案的主要内容,如果未能解决你的问题,请参考以下文章

运行go代码报错fork/exec ...main.exe: Access is denied.解决

运行go代码报错fork/exec ...main.exe: Access is denied.解决

解决容器运行 Go 代码 unknown time zone 的正确姿势

解决容器运行 Go 代码 unknown time zone 的正确姿势

django-crontab定时任务报错记录

linux arm 运行 shell .sh 脚本文件报错:/bin/bash^M: bad interpreter: No such file or directory(dos2unix )(代码片