제조 데이터를 기록하기 위해 생산 시스템에서 Raspberry Pi를 사용하려는 의도로 Raspberry Pi를 테스트하고 있습니다. 모든 것이 잘 돌아가고 있으며 지난 달 테스트 데이터를 기록해 왔습니다.
중복성과 위험 관리를 위해 예약해야 하는 Python 스크립트가 많이 있습니다.
저는 과거에 Windows Server 환경에서 작업해 왔으며 작업 스케줄러가 필요한 모든 작업을 수행했습니다. 문제 로깅, 실패 시 작업 재시도, 알림 등
나는 지난 몇 주 동안 cron을 가지고 놀면서 너무 많은 시간을 낭비했습니다. 로그 파일은 도움이 되지 않으며 MTA가 설치되어 있지 않기 때문에 실제 오류가 누락되었습니다.
일정을 더 어렵게 하기보다는 더 쉽게 만들 수 있는 대안이 있습니까?
문제에 대한 세부정보를 추가했습니다.
- 나는 과거에 ">>"를 시도했지만 운이 없었습니다. 이것이 정상적인 관행이라면 다시 시도해 볼 것입니다.
- Python 스크립트를 수동으로 실행하면 제대로 실행됩니다. 그러나 crontab에 넣자마자 작동이 중지되고 로그가 없어 문제를 해결할 수 없거나 적어도 문제를 이해할 수 없습니다.
- 파일 쓰기에 문제가 있는 것 같습니다. 실행 중인 cron 작업은 Bluetooth 장치에 연결한 다음 MySQL 데이터베이스에 데이터를 기록하는 Python 스크립트입니다.
- cron 로그는 작업 출력을 보고하려고 시도하지만 MTA가 설정되지 않았기 때문에 MTA 문제만 보고하고 실제 문제에 대한 추가 정보는 제공하지 않습니다. (/var/log/cron.log가 메인 로그죠?)
- MTA를 조사해 보면 인터넷 연결이 문제이고 항상 사용 가능하지 않을 수도 있습니다.
- 내 데이터 로깅 작업은 "crontab -e"에 있고 "sudo crontab -e"에 있는 이미지 파일을 생성하는 작업이 있습니다. (저는 두 개의 다른 crontab 파일을 사용했습니다)
- 내 모든 크론 작업은 다음과 같습니다: 00 6 * * * python /app/test.py
답변1
사실 크로나는예생산 준비 완료. 너무 많은 전투를 겪었기 때문에 오작동을 비난하기는 어렵습니다. 귀하가 겪을 수 있는 문제는 단순한 오류로 인해 발생한 것입니다. cron의 문제점이 무엇인지 정확하게 지적해 주시면 많은 도움이 될 것입니다.
gaueth가 이미 지적했듯이 >> /tmp/somefile 2>&1
crontab에서 명령을 추가할 수 있습니다. 그 기능은 다음과 같습니다:
>> /tmp/somefile
"명령의 표준 출력 스트림을 /tmp/somefile에 추가"하는 것을 의미합니다. 이는 단순히 터미널에 인쇄될 모든 내용을 지정된 파일에 기록하는 것입니다. (덮어쓰기)>>
대신 (추가) 를 사용하는 것에 유의하세요>
.2>&1
"stderr를 stdout으로 보냅니다"를 의미합니다. 인간의 관점에서: 표준 출력을 작성하는 동일한 위치에 오류의 출력을 작성합니다(위와 같이).
이를 사용하면 cron이 스크립트를 실행한 후 발생하는 전체 로그를 얻을 수 있습니다. 로그 파일에 이 데이터가 있도록 스크립트에서 현재 날짜(및 기타 몇 가지 사항)를 인쇄하도록 하는 것이 좋습니다.
또 한 가지 염두에 두어야 할 점은 PATH
변수입니다. Cron은 대화형 터미널 세션과 약간 다른 환경에서 실행되므로 echo $PATH
다음과 같이 스크립트 자체 또는 crontab 줄에 출력을 포함하는 것이 가장 좋습니다 */20 * * * * export PATH=<paste output of echo $PATH here>; <command>
.
답변2
> /tmp/logfile 2>&1
예약된 명령 후에 crontab을 사용하여 명령 출력을 로그 파일로 리디렉션할 수 있습니다 . 또한 확인해보세요그놈 일정crontab
및 작업을 위한 그래픽 사용자 인터페이스입니다 at
.
답변3
Unix 시스템의 프로덕션 준비 일정 도구는 cron입니다.
로깅 문제
크론은 무엇을 기록하나요?그것시스템 로그에서 수행된 작업입니다. 작업 출력을 이메일로 보냅니다(사용 가능한 경우).
실패 시 작업 재시도
Cron은 이를 수행하지 않으며 그럴 만한 이유가 있습니다. 실패 시 작업을 다시 시도하는 것이 비즈니스 논리입니다. 시스템은 어떤 오류로 인해 재시도가 이루어져야 하는지, 언제, 어떤 오류가 치명적인 오류인지 어떻게 알 수 있나요? 다시 시도해야 하는 경우 필요에 따라 작업을 다시 시도하거나 여러 작업을 서로 다른 시간에 예약하세요.
통지하다
위의 로깅을 참조하세요. 일반적으로 성공적인 작업에는 알림이 표시되지 않고 로그 항목만 표시됩니다. 작업 완료 시 알림을 받으려면 원하는 알림 메커니즘을 사용하여 작업 스크립트에 추가하세요. (준강제 GUI가 있는 Windows와 달리 Unix는 GUI 환경에서 일괄 작업을 실행하지 않으므로 내장된 GUI 기반 알림 기능이 없습니다.)
훨씬 더.
무엇?
MTA가 설치되어 있지 않기 때문에 실제 오류는 손실됩니다.
"박사님, 이렇게 하면 너무 아파요."
MTA 설치. 전자 메일을 보낼 수 있는 MTA는 모든 Unix 설치에서 예상되는 구성 요소이지만 일부 배포판에서는 기본 설치에서 이를 생략합니다.
답변4
벌써부터 너무 좋아젠킨스 CI다양한 "스테로이드 사용 크론" 임무에 사용됩니다. 나는 백업 생성 및 복원, 오래된 파일/디렉토리 정리, 여러 단계가 포함된 사용자 정의 루틴 등 기본적으로 자동화할 수 있는 모든 작업에 이를 사용합니다. 로깅은 훌륭하며 필요한 기능은 기본적으로 제공되거나 사용 가능한 많은 플러그인 중 하나를 사용하여 쉽게 추가됩니다.
한 번 시도해 보시고 CI Butler를 알게 된 후에는 어떻게 이겨냈는지 궁금하실 것입니다.