2015-11-26 5 views
2

У меня есть настройка crontab для запуска скомпилированного скрипта golang. Сценарий отвечает за копирование папки на ftp. Ничего особенного в этом.Crontab не запускает программу go/golang

Я могу запустить программу в командной строке, просто набрав «/ backup/main». И все это работает.

Теперь я хочу запускать эту программу каждую ночь. Я установил cronjob для запуска каждые 5 минут, чтобы проверить, работает ли он. И это не так!

Если я проверяю системный журнал, я вижу, что программа звонит, но ничего не происходит.

Файл «/ backup/main» является chmod a + x Кронтаб установлен в «sudo» (sudo crontab -e). Поэтому все разрешения должны быть в порядке.

Линия в кронтаб:

*/5 * * * */резервного копирования/главная

Хмель кто-то может помочь.

ответ

2

Возможно, что-то не так, и программа напечатает некоторый журнал, но журнал будет перенаправлен на/dev/null, и вы не сможете проверить журнал ошибок. вы можете добавить это, чтобы распечатать журнал в каком-то файле журнала.

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

Бревно уровень 2 говорит мне, что не может найти файл.Я проверил, как десять раз. Путь правильный. –

+0

У меня была ошибка в моей программе. Его искали в неправильном каталоге. Отладка с помощью строки журнала, которую вы предоставили, помогает найти эту проблему. –

2

Обычная мудрость о бесшумных отказах cron заключается в том, что это, вероятно, окружающая среда. Упаковывая свою программу golang в сценарий оболочки, вы можете управлять средой (и запускать свои профили). Вы также можете добавить полезные отладочные биты, такие как «env».

Для имитации хрон с его пустым окр пробег:

env -i ./myscript.sh 

где myscript.sh является CHMOD + х и просто работает «окр». Затем поставьте свою команду golang и посмотрите, не работает ли она без среды. Затем, когда вы доказали, что это среда (надеюсь), используйте сценарий оболочки в cron.

+0

env просто сообщает мне следующее «нет такого файла или каталога». Таким образом, кажется, что среда не может найти папку/файл. Любая идея исправить это? –

+0

Huh. Какой файл вы пытаетесь запустить? Вставьте полный путь, а также 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

Спасибо, Гарвит! В моем случае достаточно было добавить GOPATH =/path/to/my/project / –

Смежные вопросы