git commit не работает из задания cron, хотя git pull работает

в моем crontab у меня есть следующая строка:

48 14 * * * bash /home/erelsgl/git/erel-sites/add-commit-push.bash "from home" 2&>1 >> /home/erelsgl/logs/backup_from_home.log

скрипт делает то, что подразумевает его название-add, commit и push:

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd $DIR
echo --------------------
date
echo == add ==
/usr/bin/git add -A
echo == commit ==
/usr/bin/git commit -m ""
echo == pull ==
/usr/bin/git pull
echo == push ==
/usr/bin/git push

как видно из файла журнала, "commit" ничего не делает, а "pull" отлично работает:

Fri Oct 23 14:48:01 IDT 2015
== add ==
== commit ==
== pull ==
Already up-to-date.
== push ==

минуту спустя я выполнил ту же самую команду из командной строки и получил следующий журнал, что означает, что фиксация произошла:

Fri Oct 23 14:49:31 IDT 2015
== add ==
== commit ==
On branch master
Your branch is up-to-date with 'origin/master'.

nothing to commit, working directory clean
== pull ==
Already up-to-date.
== push ==

В чем проблема при запуске commit из cron работа?

примечание: Я также сделал тот же эксперимент с фактическим изменением в тестовом файле. Я узнал, что, действительно, фиксация не произошла из crontab (ничего не было выдвинуто вверх по течению), но произошло из командной строки.

1 ответов


cron использует sh по умолчанию, поэтому попробуйте, как описано в "как перенаправить вывод в файл из cron?":

  • нет 'bash'
  • С 2>&1 в конце

что есть:

48 14 * * * /home/erelsgl/git/erel-sites/add-commit-push.bash "from home" >> /home/erelsgl/logs/backup_from_home.log 2>&1

и поместите в свой скрипт bash a директива shebang:

#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd $DIR
...

другой формой будет использование командной строки bash (как в "перенаправление вывода хрона Иов"):

48 14 * * *  /bin/bash -l -c '/path/to/script >> ./log/my_log.log 2>&1'

после изменения порядка перенаправления, как рекомендуется, мой файл журнала действительно показывает длинное сообщение об ошибке:

Please tell me who you are. 
Run git config --global user.email "you@example.com" 
    git config --global user.name "Your Name" 
to set your account's default identity

Я уже сделал это в своей учетной записи, но задание cron, вероятно, не находит файл конфигурации. Как сделать так, чтобы он нашел правильный файл git config?

задание cron, скорее всего, будет выполняться с другой учетной записью (или root): его глобальная конфигурация git (~/.gitconfig) не быть таким же, как тот, который вы установили с учетной записью пользователя.

одно простое решение -повторите эти конфигурации git (без --global) внутри целевого репозитория Git: это зарегистрирует идентификатор пользователя в самом РЕПО, вместо того, чтобы полагаться на глобальную конфигурацию, которая не является общей для учетных записей.