![由 cron 触发的 bash 脚本中的 scp 尝试失败;手动运行脚本时有效](https://linux22.com/image/129587/%E7%94%B1%20cron%20%E8%A7%A6%E5%8F%91%E7%9A%84%20bash%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E7%9A%84%20scp%20%E5%B0%9D%E8%AF%95%E5%A4%B1%E8%B4%A5%EF%BC%9B%E6%89%8B%E5%8A%A8%E8%BF%90%E8%A1%8C%E8%84%9A%E6%9C%AC%E6%97%B6%E6%9C%89%E6%95%88.png)
尝试在由 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
到目前为止,这些都没有奏效。有小费吗?