다른 스크립트 내에서 스크립트 호출

다른 스크립트 내에서 스크립트 호출

cronjob을 사용하여 10분마다 호출하는 스크립트가 있습니다.

*/10 * * * * ~/mydirectory/myscript.sh

이제 내부에 또 다른 스크립트가 있습니다. 내부에서 이를 호출하고 싶다고 ~/mydirectory가정해 보겠습니다 . 두 스크립트 모두 실행 파일로 편집 되었으며 명령줄에서 실행 하면 모든 것이 잘 작동합니다. 나는 다음과 같이 실행합니다 :myotherscript.shmyscript.shchmodmyscript.sh~/mydirectory

. myscript.sh

하지만 cronjob이 작동하지 않는 것 같습니다. 기본 스크립트 내부에서 두 번째 스크립트에 대한 참조를 제거해도 여전히 작동하므로 두 번째 스크립트를 참조하는 방식에 문제가 있는 것 같습니다. 내용은 myscript.sh다음과 같습니다.

#! /bin/bash
do-something
do-something-else
. myotherscript.sh

~/mydirectorycronjob이 실행 중일 때 현재 디렉터리가 없기 때문에 cronjob이 파일을 찾을 수 없을 수 있습니까 myotherscript.sh? 그렇다면 파일을 어떻게 볼 수 있습니까? 어떤 시점에서는 그것을 다른 디렉토리로 이동 하고 싶 myotherscript.sh거나 어떤 시점에서 이름을 바꾸고 싶고 ~/mydirectory변경된 내용을 원하지 않기 때문에 기본 스크립트 내부에 절대 경로를 지정하고 싶지 않습니다. myscript.sh새로운 절대 경로를 참조하는 콘텐츠입니다 .

보너스 질문: 이제 cronjob이 실행될 때 저는 기본적으로 엄지손가락을 치켜세우고 최선을 다하기를 바랄 뿐입니다. 하지만 성공했는지, 실패했다면 그 이유를 알 방법이 없습니다. cronjob이 예상대로 실행되지 않는 이유를 확인하는 방법에 대한 팁이 있습니까?

답변1

자, Glenn Jackman의 답변이 효과가 있었고 추가 질문에도 답변이 되었습니다. 하지만 이후 cronjob이 스크립트와 동일한 디렉터리에서 실행되도록 하는 더 우아하다고 생각되는 다른 방법을 알아냈습니다.

그냥 교체하세요

*/10 * * * * ~/mydirectory/myscript.sh

그리고

*/10 * * * * cd ~/mydirectory && ./myscript.sh

이것으로 문제가 해결됩니다. 모든 것이 정상입니다.

답변2

스크립트를 잘못 호출했습니다. 그것은해야한다:

#! /bin/bash
do-something
do-something-else
./myotherscript.sh;

답변3

myscript다음이 있어야 합니다:

cd "$(dirname "$0")"
. ./myotherscript.sh

cron이 스크립트를 시작할 때 $PWD는 /다음과 같을 수 있습니다. 상대 경로를 사용하려면 스크립트 위치로 이동해야 합니다.

스크립트의 출력을 기록하는 것이 유용할 수 있습니다.

*/10 * * * * ~/mydirectory/myscript.sh 2>&1 | /usr/bin/ts '[%FT%T]' >> ~/mydirectory/myscript.log

ts각 입력 줄에 타임스탬프를 추가합니다. Fedora와 Ubuntu에서는 moreutils패키지에 있습니다 .

답변4

crontab에서 PATH 및 MAILTO를 정의하면 도움이 될 것입니다.

관련 정보