![cron에 의해 트리거된 bash 스크립트의 scp 시도는 스크립트를 수동으로 실행할 때 작동하지 않습니다.](https://linux55.com/image/129587/cron%EC%97%90%20%EC%9D%98%ED%95%B4%20%ED%8A%B8%EB%A6%AC%EA%B1%B0%EB%90%9C%20bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98%20scp%20%EC%8B%9C%EB%8F%84%EB%8A%94%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EC%88%98%EB%8F%99%EC%9C%BC%EB%A1%9C%20%EC%8B%A4%ED%96%89%ED%95%A0%20%EB%95%8C%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..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 명령을 변경해 보았습니다.
scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@$server:/tmp/$"server.db" "$dir/"
$dir 변수에서 "/tmp"와 같은 하드코드된 경로로 대상을 변경해 보세요.
bash 스크립트의 scp 바로 앞에 다음 줄을 추가해 보세요.
PWD=/etc/scripts
지금까지 이들 중 어느 것도 효과가 없었습니다. 어떤 팁이 있나요?