다른 디렉토리의 Crontab 스크립트가 작동하지 않습니다.

다른 디렉토리의 Crontab 스크립트가 작동하지 않습니다.

다음 crontab 명령을 사용하여 매일 코드 베이스를 업데이트하려고 했습니다. 그러나 테스트했을 때 첫 번째 단계 자체가 작동하지 않았습니다.

27 15 * * * . cd /home/covuser/user/ && . /home/covuser/user/conf.sh
40 17 * * * . cd /home/covuser/user && . /home/covuser/user/checkout.sh

conf.sh에는 코드 체크아웃에 필요한 환경 변수가 포함되어 있습니다. checkout.sh 파일은 체크아웃 프로세스를 수행합니다.

첫 번째 줄은 필요한 환경 변수를 설정해야 합니다. 그러나 그것은 일어나지 않습니다.

이것에 어떤 실수가 있었습니까? 미리 감사드립니다.

답변1

crontab의 각 줄은 독립적으로 예약되고 실행되는 별도의 작업을 나타냅니다.

이는 특히 귀하의 경우 서로 다른 쉘 세션에서 실행되므로 한 작업에서 일부 환경 변수를 설정하기 위해 스크립트 파일을 소싱해도 나중에 다른 작업이 실행될 환경에 영향을 미치지 않는다는 것을 의미합니다.

프로세스를 변경하고 동일한 쉘 세션 내에서 두 스크립트를 모두 실행해야 하므로 동일한 크론 작업에서 가장 쉽게 실행할 수 있습니다.

실행 사이에 지연이 필요한 경우 sleep고정된 나중 시간으로 다른 작업을 예약하는 대신 이를 달성할 수 있습니다.


아, 물론 다른 의견과 답변에서 지적했듯이 .하위 쉘 대신 현재 쉘 환경에서 실행되도록 소스 스크립트만 사용할 수 있습니다. 하지만 은 cd스크립트가 아니라 내장된 쉘 명령이므로 어쨌든 항상 현재 쉘 환경에서 실행되므로 작성하는 것도 . cd somehwere오류입니다.

답변2

나는 문제가 .이전 의 cd.

.(별칭 fro source)을 사용하면 파일 소스를 얻을 수 있습니다. 와 같은 쉘 내장 기능은 cd소스로 제공될 수 있는 실행 파일이 아니기 때문에 작동하지 않습니다 .

두 명령을 AND - 로 연결하면 &&쉘은 결과 값( false && true == false)을 변경하지 않으므로 실패한 명령 다음의 모든 명령을 건너뜁니다. 다른 동작을 원할 경우 the를 &&a로 바꿀 수 있습니다 .;

이것은 작동합니다 :

27 15 * * * cd /home/covuser/user/ && . /home/covuser/user/conf.sh
40 17 * * * cd /home/covuser/user && . /home/covuser/user/checkout.sh

업데이트: 스크립트가 종속적이라면(제 생각엔 그럴까요?) 단일 세션에서 모든 것을 실행하세요. (각 cron 항목을 실행하기 위해 새로운 bash 세션이 열립니다)

27 15 * * * cd /home/covuser/user/ && . /home/covuser/user/conf.sh && . /home/covuser/user/checkout.sh

관련 정보