我已经设置了crontab来运行已编译的golang脚本。该脚本负责将文件夹复制到ftp。没什么特别的。
只需输入" / backup / main"我就可以在命令行中运行程序一切正常。
现在我想每晚都运行这个程序。我已经设置了每5分钟运行一次的cronjob来测试它是否有效。它不!
如果我检查系统日志,我可以看到该程序正在调用,但没有任何反应。
文件" / backup / main"是chmod a + x crontab设置在" sudo" (sudo crontab -e)。所以alle权限应该没问题。
crontab中的行:
* / 5 * * * * / backup / main
啤酒花有人可以提供帮助。
答案 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?
希望这可以帮助遇到类似问题的人。