2012-01-25 2 views
0

쉘 스크립팅을 처음 사용합니다. 나는 이것을 통해 노력하고있다.쉘 스크립트에서 스크립트 호출 - 가져 오기 명령을 찾을 수 없음

> script to execute in cron (util.sh) 
#!/bin/sh 
HOST='ahostname' 
PORT='3306' 
USER='auser' 
PASS='apassword' 
DB='adatabase' 
. /mnt/stor/backups/backup.sh 

(나는 또한 시도 소스 /mnt/stor/backups/backup.sh) backup.sh가 호출 될 때

> script to execute (backup.sh) 

이 (가 호출되는 않음) 단순히 구문 분석이 아닌 것으로 보인다 실행. 그래서 아무리 내가 그 안에 넣어 내가 같은 메시지를 얻을 :

/mnt/stor/backups/backup.sh: line 8: date: command not found 
/mnt/stor/backups/backup.sh: line 8: mysqldump: command not found 
/mnt/stor/backups/backup.sh: line 8: tar: command not found 
/mnt/stor/backups/backup.sh: line 8: rm: command not found 

을 생각은 도메인 지역화 파일이 변수를 실행하고 더러운 일을하기 위해 변수를 사용하여 마스터 스크립트를 호출하는 것입니다. 내 호스트 중 하나와 여러 도메인의 제한으로 인해 이것이 최선의 방법입니다.

+1

대부분의 경우, 서브 쉘이 부모 쉘보다 훨씬 다른 경로를 가지고있다. 명령에 절대 경로를 추가해보십시오 (예 : '/ bin/rm','/ bin/tar' 등 ... –

+0

'PATH'가 cron 명령에 맞게 적절히 설정되지 않은 것 같습니다. 이 경우, 명령에 절대 경로명 (날짜, 타르 등)을 사용하거나 backup.sh에서'PATH'를 설정하는 것이 도움이 될 수 있습니다. –

+0

* perl * 태그가 붙은 이유는 무엇입니까? – Quentin

답변

1

문제가있는 스크립트는 /mnt/stor/backups/backup.sh 인 것 같습니다. 스크립트가 도구를 찾을 수 있도록 PATH가 바이너리와 함께 모든 일반적인 디렉토리를 포함하도록 설정하십시오. 또는 /mnt/stor/backups/backup.sh을 변경하고 'rm' 대신 /bin/rm과 같은 명령에서 절대 경로를 사용하십시오.

+0

경로가 미스되었습니다. 감사합니다. – chrisrth

1

cron에서 실행하는 경우 일반적으로 로그인 셸의 프로필에있는 변수 (예 : PATH, CLASSPATH 등)에 의존 할 수 없습니다. 필요한 것을 명시 적으로 설정해야합니다. 귀하의 경우, 문제의 원인이되는 PATH 변수가 부족하다고 생각합니다.

무인 스크립트에서 실행중인 프로그램의 전체 경로를 지정하여 실제로 해당 명령을 실행하려는 경우 (예 : 경로에 의존하지 않음) 좋습니다.

그래서 대신 예를 들어

date 

사용

/bin/date 

관련 문제