exec cp가 스크립트에서 실패하지만 직접 실행하면 작동합니다.

exec cp가 스크립트에서 실패하지만 직접 실행하면 작동합니다.

SQL 백업을 Windows 서버에 복사하는 스크립트가 있습니다. /etc/fstab의 줄은 다음과 같습니다.

//my.win.box/share$ /winshare   cifs    credentials=/etc/credfile,dom=mydomain,uid=0,gid=0,file_mode=0600,dir_mode=0700 0 0

백업 스크립트는 다음과 같습니다.

백업.sh:

# copy zipped sql exports to /winshare/db
find /backups/sql/*sql.gz -mtime +1 -exec cp {} /winshare/db \;

루트 권한(이 경우 루트)으로 로그인했습니다.

$ ./backup.sh
cp: cannot create regular file `/winshare/db/mydb_20130301.sql.gz': Permission denied

그러나 스크립트를 통하지 않고 프롬프트에서 명령을 실행하는 경우:

$ find /backups/sql/*sql.gz -mtime +1 -exec cp {} /winshare/db \;

파일이 예상대로 복사되었습니다. 다시 여기에 루트로 로그인합니다.

스크립트 내 명령이 실패하지만 동일한 명령이 콘솔에서 작동하는 원인은 무엇입니까?

답변1

당신은 이것이 어떤 종류의 기계인지 말하지 않지만, 내가 처음 관찰한 바는 당신의 backup.sh에 그것을 실행할 프로그램을 지정하는 해석기 줄이 없다는 것입니다. 당신은 다음과 같은 것을 원합니다 :

#!/bin/bash
export PATH=/bin:/usr/bin

find....your stuff..here

이제 그것만으로는 허가 문제가 해결되지는 않지만 도움이 될 것입니다. 다른 find 명령을 지정했거나 그 명령이 무엇인지 아는 사용자 쉘이 소싱한 시스템 전체 .rc 파일이 있을 수 있습니다. 인터프리터를 지정하면 해당 인터프리터의 초기화 파일을 살펴볼 수 있습니다. 또한 로그인 환경에는 스크립트에 없는 환경이 있을 수 있습니다.

관련 정보