Cron을 통해 작업을 시작하는 것은 어떨까요?

Cron을 통해 작업을 시작하는 것은 어떨까요?

나는 쉘 스크립트를 작성했다

#!/bin/bash
#clear
#echo "Good morning, world."
source activate python36
python /opt/project1/Table_Control.py opt/project1/connection.yaml

cron으로 작성한 후

# job 
1 19 * * * /opt/project1/start.sh

다른 변형을 시도했습니다.

# job 
1 19 * * * cd /opt/project1/ && ./start.sh

확인하고 결과 얻기

May 11 19:01:01 server01 CROND[127428]: (root) CMD (/opt/project1/start.sh)

그리고

May 11 19:43:01 server01 CROND[13797]: (root) CMD (cd /opt/project1/ && ./start.sh)

그런데 회사에서 나에게 이메일을 보내야 하는데 아직 이메일을 받지 못했습니다((

쉘 스크립트가 실행되었는지 여부

/opt/project1/start.sh

훌륭하게 작동합니다.

이 문제를 어떻게 해결하나요?

답변1

나중에 cron에 의해 실행되는 스크립트를 작성할 때 흔히 저지르는 실수는 스크립트가 로그인하여 개발할 때와 똑같은 환경을 가질 것이라고 가정하는 것입니다. 아직 아님!

이 답변프로세스 환경 확인과 디버깅의 차이점에 대한 추가 설명입니다.

그러나 귀하의 라인에서는 source activate python36activate가 현재 디렉토리에 있다고 가정하고 다른 라인에서는 python그것이 cron 작업의 경로에 있다고 가정합니다.

명령을 자체 하위 쉘에 넣고 모든 것을 로그 파일로 리디렉션하여 무슨 일이 일어나고 있는지 확인하십시오.

예를 들어.

1 19 * * * (cd /opt/project1/ && ./start.sh) >/tmp/pr1.log 2>&1

답변2

이러한 종류의 문제를 디버깅하려면 각 줄에 일부 로깅을 추가하는 것이 편리한 경우가 많습니다. 이와 같이:

소스 활성화 python36 >> /tmp/1.log 2>&1

python opt/project1/Table_Control.py opt/project1/connection.yaml >> /tmp/2.log 2>&1

매분마다 시작되도록 cron 작업을 설정할 수도 있으므로 기다릴 필요가 없습니다. 도움이 될 것입니다.

답변3

변경 후

python opt/project1/Table_Control.py opt/project1/connection.yaml >> /tmp/2.log 2>&1

로그에서 Python이 요청한 Python 모듈을 찾지 못했다는 오류를 발견했습니다.

내가 변했지

python opt/project1/Table_Control.py opt/project1/connection.yaml >> /tmp/2.log 2>&1

도착하다

/data/Anaconda2-4.4.0/envs/python36/bin/python opt/project1/Table_Control.py opt/project1/connection.yaml >> Table_Control.log >&1

메모

지금은 잘 작동하지만 쉘 스크립트에서 실행하면 오류가 없지만 cron 작업에서 실행하면 요청한 Python 모듈을 찾을 수 없다는 오류가 반환되는 이유를 이해할 수 없습니다.

관련 정보