2015-11-26 100 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 / –