如何在 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 shell 中调用该脚本时,该脚本将按其顺序运行,但不能通过 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 存储库上尝试了一个改编的程序并遇到了同样的问题。 Mr. Bean 不能立即放弃这个 CVS 存储库并切换到新的 Git 存储库。

[更新]

我有多个身份文件$HOME/.ssh/。从 crontab 运行时是否可能需要指定要使用的身份文件?如果是这样,怎么办?

答案1

猜测一下(我不是 unix 专家,但也遇到过 cron 作业未运行的类似问题),您以什么用户身份执行任务?该用户是否拥有访问您所需的所有内容所需的所有权限?

我怀疑不是(错误是这样说的!:-D)。

如果您从工作用户注销并以其他用户身份登录,bash 脚本仍然可以工作吗?如果没有,那么这确实有帮助。

我们使用的解决方案是以特定用户身份运行任务。

似乎有几种方法可以做到这一点(并非总是如此)。我无法评论其中一个相对于另一个的优点 - 这将由您决定。 如何在crontab中指定由什么用户运行脚本?

相关内容