cronによってトリガーされたbashスクリプトのscp試行は、スクリプトを手動で実行しても機能しません。

cronによってトリガーされたbashスクリプトのscp試行は、スクリプトを手動で実行しても機能しません。

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

これまで、これらのどれも効果がありませんでした。どのようなヒントがありますか?

関連情報