2015-11-26 72 views
2

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

我可以通过输入“/ backup/main”在命令行中运行程序,它都可以工作。

现在我想每晚运行这个程序。我已经安装了cronjob,每5分钟运行一次以测试它是否可用。它不!

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

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

在crontab中的行:

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

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

回答

2

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

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

日志级别2告诉我,它无法找到该文件。我现在查了十次。路径是正确的。 –

+0

我在程序中出错。它正在寻找错误的目录。通过您提供的日志行进行调试可以帮助您找到此问题。 –

2

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

要模拟的cron与它的空ENV运行:

env -i ./myscript.sh 

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

+0

该env只告诉我下面的“没有这样的文件或目录”。所以看起来环境找不到文件夹/文件。任何想法解决这个问题? –

+0

呵呵。你试图运行哪个文件?在文件上粘贴完整路径以及ls -l。 – obscurite

1

希望能帮助别人谁也无法找到解决方案,我说:

问题可以通过添加路径和GOPATH变量的crontab -e文件来解决。

您可以通过运行找到他们echo $PATHecho $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

+0

谢谢,Garvit!就我而言,添加GOPATH =/path/to/my/project / –