주어진 시작 날짜/시간에 발생할 crontab 이벤트를 가져옵니다.

주어진 시작 날짜/시간에 발생할 crontab 이벤트를 가져옵니다.

RPi 프로젝트에서 일부 명령을 예약하는 crontab이 있고 이러한 명령이 플래그 상태를 전환한다고 가정합니다. 상자의 전원이 꺼졌다가 다시 시작될 수 있습니다. 상자가 계속 작동하면 플래그 상태가 올바른 상태가 되기를 바랍니다.

내 생각:
재부팅 시 작업이 있습니다.

  1. 마지막으로 알려진 주 날짜를 복원합니다(쉽습니다. 로그 항목을 파일에 저장할 수 있으며 파일 날짜는 "마지막으로 알려진 주 날짜"로 지정됩니다).
  2. 만료 기간 동안 발생할 이벤트 목록을 가져오고 이를 사용하여 새 상태를 계산하도록 crontab에 요청합니다.
  3. 완료되었습니다. 평소대로 작업하세요 :)

더 똑똑한 방법이 있는지 알려주십시오. 그렇지 않은 경우 포인트 2를 어떻게 달성할 수 있습니까?

답변1

cron이벤트 목록이 제공되지 않습니다. 할 수 있는 일은 스크립트를 주기적으로 실행하는 것입니다. 스크립트에서 다음을 수행하도록 합니다.

  1. 구성 파일의 날짜 타임스탬프를 var X로 읽습니다.
  2. 미리 결정된 이벤트 간격(예: 60분)만큼 X를 증가시킵니다.
  3. X < 현재 날짜 시간은 나머지 스크립트를 실행하고 X를 구성 파일에 쓰고 2를 반복합니다.
  4. (루프에서 최소한의 시간을 기다려야 할 수도 있습니다)

이렇게 하면 컴퓨터가 실행되는 동안 오류가 발생하더라도 스크립트는 원하는 만큼 플래그를 전환합니다. 날짜 타임스탬프 파일이 간격보다 오래되지 않은 경우 스크립트는 아무 작업도 수행하지 않으므로 실행되는 것보다 훨씬 더 자주 cron 작업에서 호출할 수 있습니다. 이렇게 하면 다시 시작한 후의 따라잡기가 평균적으로 간격의 절반 후에 발생할 필요가 없습니다. (예: 5분마다 실행되도록 스크립트를 예약합니다.) 스크립트가 두 번 실행되는 것을 방지하려면 잠금을 사용해야 합니다(정전 후 하나의 스크립트가 이를 따라잡으려고 하는 경우).

답변2

비휘발성 저장소에 상태를 기록 /var/tmp/status_task_x하고 다음 실행 시 동일한 파일에서 마지막으로 설정된 상태를 읽는 것은 어떨까요? 이 경우 재부팅 후에도 유지되어야 합니다.

crontab 예에서:

* * * * * status_task_x=$(<"/var/tmp/status_task_x") /path/to/run_task_x $status_task_x

작업 스크립트가 출력을 다음에 쓰도록 합니다./var/tmp/status_task_x

답변3

분명히 이것은 즉시 사용 가능한 작업이 아닙니다. Python에서 라이브러리를 찾았습니다. https://pypi.python.org/pypi/python-crontab 개별 작업에 대한 "일정"을 찾을 수 있습니다.

schedule = job.schedule(date_from=datetime.now())
...
datetime = schedule.get_next()

이것이 바로 필요한 것입니다. 마지막 다시 시작한 날짜 부터 시작 date_from하지만 datetime지금보다 짧은 주기입니다.

관련 정보