cronが予約したbashスクリプトでscpファイルを試してください。 cron がトリガーすると、scp は許可拒否エラーメッセージで失敗します。以下を使用してスクリプトを手動で実行する場合:
/etc/scripts> bash script3
scpコマンドはうまくいきます。
cronタスクの問題を解決する方法についての前の質問では、コマンドラインから手動で実行したときとcronを介して実行したときに環境変数が異なる可能性があることを学びました。そこで、提案されたトラブルシューティングのヒントの1つに従って、cronを介して次のタスクをスケジュールしました。
lab-1:/etc/scripts# cat cronenvtest
OFILE=/tmp/crons.environment
(/usr/bin/whoami
/usr/bin/env ) > $OFILE 2>&1
出力は次のとおりです。
lab-1:/var/www/# tail -f /tmp/crons.environment
HOME=/root
RC_SVCNAME=crond
LOGNAME=root
RC_SERVICE=/etc/init.d/crond
TERM=screen
SVCNAME=crond
PATH=/bin:/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
LANG=en.utf8
SHELL=/bin/sh
PWD=/root
コマンドラインで「env」を実行すると、次のようになります。
lab-1:/tmp# env
SSH_CLIENT=10.1.1.1 57728 22
USER=root
MAIL=/var/mail/root
SHLVL=1
OLDPWD=/etc/scripts
HOME=/root
SSH_TTY=/dev/pts/4
PAGER=less
PS1=\h:\w\$
LOGNAME=root
TERM=screen
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
LANG=en.utf8
SSH_AUTH_SOCK=/tmp/ssh-eGvX0isT3V/agent.22951
SHELL=/bin/ash
PWD=/tmp
CHARSET=UTF-8
SSH_CONNECTION=10.1.1.1 57728 10.2.2.2 22
以下は、scpを試みるスクリプトの行です。
scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null @$server:/tmp/"$server.db" "$dir/"
今まで試したこと
次のようにrootユーザーを含めるようにscpコマンドを変更してみました。
scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@$server:/tmp/$"server.db" "$dir/"
$dir変数で、"/tmp"などのハードコードされたパスにターゲットを変更してみてください。
bashスクリプトのscpの直前に次の行を追加してみてください。
PWD=/etc/scripts
これまで、これらのどれも効果がありませんでした。どのようなヒントがありますか?