如何在 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中指定由什麼使用者執行腳本?

相關內容