Crontab赢得了go / golang计划

时间:2015-11-26 09:24:43

标签: linux go cron crontab

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

只需输入" / backup / main"我就可以在命令行中运行程序一切正常。

现在我想每晚都运行这个程序。我已经设置了每5分钟运行一次的cronjob来测试它是否有效。它不!

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

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

crontab中的行:

* / 5 * * * * / backup / main

啤酒花有人可以提供帮助。

4 个答案:

答案 0 :(得分:2)

可能有问题,并且程序会打印一些日志,但是日志会被重定向到/ dev / null,而您无法检查错误日志。 您可以添加此项以将日志打印到某个日志文件。

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

答案 1 :(得分:2)

关于cron无声失败的传统观点是它可能是环境。通过将golang程序包装在shell脚本中,您可以控制环境(并使您的配置文件运行)。您还可以输入有用的调试位,如" env"。

用cn模拟cron的空env:

env -i ./myscript.sh

其中myscript.sh是chmod + x,只运行" env"。然后将golang命令放在那里,看看它是否仍然可以在没有环境的情况下运行。然后,当您已经证明它是环境(希望如此)时,请在cron中使用shell脚本。

答案 2 :(得分:2)

希望能帮助那些无法找到解决方案的人:

可以通过向crontab -e文件添加路径和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 get示例

安装的第三个软件包
go get gopkg.in/gomail.v2

问题是您的工作目录中可能有go get! 在我的情况下是GOPATH=/var/projects/src

你可以看到里面的包

/your/working_directory/src/pkg/linux_amd64

答案 3 :(得分:0)

我偶然发现了这篇文章,因为这正是我遇到的问题。 crontab没有运行我编译的golang二进制文件。 对我来说,问题是crontab行的配置不正确。 我在配置中遵循以下格式,对我来说很成功:

{{1}}

注意!这会每分钟运行一次二进制文件
来源:How to set up a cron job to run an executable every hour?
希望这可以帮助遇到类似问题的人。