Как обновить репозиторий контроля версий в crontab?

Как обновить репозиторий контроля версий в crontab?

Я пытаюсь автоматизировать обновление репозитория контроля версий в crontab. Следующий скрипт /home/usr/mrbean/bin/update.shработает в интерактивной командной строке Bash:

#!/bin/bash

ROOTPATH="/home/user/mrbean/temp/"
cd $ROOTPATH
SSHTMPFILE="${ROOTPATH}ssh-agent.cf"
ssh-agent -s | head -n 2 > "$SSHTMPFILE"

function killsshagent {
    /bin/kill $SSH_AGENT_PID
}
trap killsshagent EXIT


if [ -f "$SSHTMPFILE" ]; then
    source "$SSHTMPFILE"
    ssh-add
    rm "$SSHTMPFILE"
fi

killsshagent

if [ `hostname` == "mrbeancomp.local" ]; then
    REPODIR="/home/usr/mrbean/repo/"
    cd $REPODIR
    cvs update -dP  > "$HOME/log/log.txt"
fi

Затем я добавляю

@hourly /home/usr/mrbean/bin/update.sh

Скрипт работает сам по себе при вызове в интерактивной оболочке Bash, но не через crontab. Он выдает ошибки и отправляет на системную почту /var/mail/mrbean:

Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-with-mic,password).
cvs [update aborted]: end of file from server (consult above messages if any)

[Обновлять]

killsshagentдобавлено в программу, поэтому ssh-agentне зависает.

[Обновлять]

Попробовал адаптированную программу в репозитории Git и столкнулся с той же проблемой. Мистеру Бину не разрешено немедленно отказаться от этого репозитория CVS и переключиться на новый репозиторий Git.

[Обновлять]

У меня есть несколько файлов идентификации в $HOME/.ssh/. Возможно ли, что при запуске из crontab мне нужно указать, какой файл идентификации использовать? Если да, то как?

решение1

Полагаю (я не эксперт по unix, но у меня была похожая проблема с неработающими заданиями cron), под каким пользователем вы выполняете задачу? Имеет ли этот пользователь все необходимые разрешения для доступа ко всему, что вам нужно?

Подозреваю, что нет (об этом говорит ошибка! :-D ).

Если выйти из рабочего пользователя и войти под другим пользователем, скрипт bash все равно работает? Если нет, то это как-то помогает.

Решение, которое мы использовали, состояло в том, чтобы запустить задачу от имени конкретного пользователя.

Кажется, есть несколько способов сделать это (не всегда). Я не могу комментировать преимущества одного из них перед другим — это вам решать. Как указать в crontab, от имени какого пользователя запускать скрипт?

Связанный контент