저는 Linux VM에서 작업하고 있으며 매일 밤 11시 35분에 API를 호출하고 데이터를 Google Cloud Storage로 내보내는 Python 스크립트를 실행하는 크론 작업을 실행하고 있습니다.
매일 11시 35분에 Google 버킷에서 일일 내보내기를 수행합니다. 예를 들어 2월 10일 오후 11시 35분에 내보낸 다음 파일을 crontab -l
가상 머신에 입력하면 다음과 같은 결과가 나옵니다.
35 22 * * * /home/worker/xxxx/yyyy/launch.sh
start.sh
#!/bin/bash
BASE_PROJECT="/home/worker/xxxx/yyyy"
export PYTHONPATH="${BASE_PROJECT}"
export GOOGLE_USER_CREDENTIALS="${BASE_PROJECT}/credentials_red.json"
export PIPENV_PIPFILE="${BASE_PROJECT}/ingestion/Pipfile"
pipenv run python "${BASE_PROJECT}/ingestion/main.py"
GCS의 파일:
내 파일은 12월부터 2월 14일까지 매일 11시 35분에 내보냈고, 이후 Google Cloud Storage로 내보낸 파일은 0개입니다. 2월 14일 에 일부 변경사항을 적용했는데 ingestion/main.py
그게 원인일 수도 있는데, 가능하다면 문제가 무엇인지 알고 싶습니다. 오늘 가장 먼저 한 일은 ingestion/main.py
2월 14일 이후의 버전을 복원하는 것이었습니다. 내가 한 다른 일은:
스크립트
ingestion/main.py
가 외부 API를 호출하고 있습니다. 오늘은 문제가 자격 증명과 관련이 있는지 확인하기 위해 가상 머신에 저장된 자격 증명을 사용하여 데스크톱에서 동일한 API를 호출했습니다. 데이터를 다시 가져올 수 있으므로 이는 문제가 되지 않습니다.그 후 가상 머신에서 직접 실행하기로 결정했고 모든 파일을 Google Cloud Storage로 가져왔기 때문에 실제로 작동했습니다( 실행할 때 이전 버전을
launch.sh
복원했습니다 .ingestion/main.py
여전히 문제의 원인이 무엇인지 잘 모르겠습니다. 실행했지만 sudo grep CRON var/log/syslog
몇 줄만 실행했습니다. 내 cronjob이 실행되지 않는 이유에 대한 자세한 정보를 얻을 수 있는 방법이 있습니까?
답변1
출력(정상 또는 오류)이 있는 경우 스크립트를 실행하는 Linux 사용자에게 이메일로 전송됩니다.
.forward
가상 머신이 메일을 광범위하게 보내도록 구성되지 않았거나 Linux에서 인터넷으로 메일을 릴레이하도록 설정하지 않은 경우 메일이 아직 남아 있을 수 있으므로 mail
명령줄에서 시도해 보세요.
스팸을 직접 보내려면 다음을 추가하세요.
[email protected]
crontab의 첫 번째 줄로.
답변2
crontab
너의 것을 바꿔라리디렉션스크립트의 모든 출력은 홈 디렉터리(또는 권한이 있고 그렇게 하려는 경우 다른 위치)의 로그 파일로 이동됩니다. 작업 cron
이 실행 중이므로비대화형 쉘, stdin
그런 다음 stdout
"비트 버킷"( /dev/null
)으로 이동합니다. 오류가 발생하면 도움이 되지 않습니다.
다음 수정된 crontab
항목을 사용해 보세요.
35 22 * * * /home/worker/xxxx/yyyy/launch.sh >> /home/worker/cronlog.txt 2>&1