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リポジトリで適切なプログラムを試しましたが、同じ問題が発生しました。 Mr. BeanはこのCVSリポジトリをすぐに放棄し、新しいGitリポジトリに切り替えることはできません。
【書き直す】
複数の身分証明書があります$HOME/.ssh/
。 crontabで実行するときに使用するIDファイルを指定できますか?それでは、どうすればいいですか?
答え1
推測すると(私はUnixの専門家ではありませんが、cronジョブが実行されていないのと同じ問題がありました)、どのユーザーでジョブを実行していますか?このユーザーが必要なすべてのアイテムにアクセスするために必要なすべての権限を持っていますか?
私はそうではないと思います(エラーはそう言います!:-D)。
仕事用ユーザーからログアウトして別のユーザーとしてログインしても、bashスクリプトは機能し続けますか?そうでなければ、これは本当に役に立ちます。
私たちが使った解決策は、特定のユーザーでタスクを実行することでした。
これを行う方法にはさまざまなものがあるようです(常にそうではない)。どちらの利点についてもコメントできません。それはあなたが決めるものです。 スクリプトを実行する必要があるユーザーをcrontabでどのように指定しますか?