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 명령을 변경해 보았습니다.
scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@$server:/tmp/$"server.db" "$dir/"
$dir 변수에서 "/tmp"와 같은 하드코드된 경로로 대상을 변경해 보세요.
bash 스크립트의 scp 바로 앞에 다음 줄을 추가해 보세요.
PWD=/etc/scripts
지금까지 이들 중 어느 것도 효과가 없었습니다. 어떤 팁이 있나요?