由 cron 触发的 bash 脚本中的 scp 尝试失败;手动运行脚本时有效

由 cron 触发的 bash 脚本中的 scp 尝试失败;手动运行脚本时有效

尝试在由 cron 安排的 bash 脚本中 scp 文件。当 cron 触发它时,scp 会失败并显示权限被拒绝的错误消息。当我使用以下命令手动运行脚本时:

/etc/scripts>  bash script3

scp 命令工作得很好。

从上一个关于如何对 cron 作业进行故障排除的问题中,我了解到,当我通过命令行手动运行时和 cron 运行时,环境变量可能会有所不同。因此,在遵循建议的故障排除提示之一时,我通过 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/"

到目前为止我尝试过的

我尝试更改 scp 命令以包含 root 用户,如下所示:

scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@$server:/tmp/$"server.db" "$dir/"

尝试将目标从 $dir 变量更改为硬编码路径,例如“/tmp”

尝试将以下行添加到 bash 脚本中,就在 scp 之前:

PWD=/etc/scripts

到目前为止,这些都没有奏效。有小费吗?

相关内容