내 crontab 파일에 다음 항목이 있습니다.
14 17 * * */2 python /home/pi/scripts/irrigate_5mins.py >/dev/null 2>&1
목적은 격일로 명령을 실행하는 것입니다. 이는 맨페이지( man 5 crontab
)에 나와 있습니다 */2
. 매뉴얼 페이지의 실제 인용문은 다음과 같습니다.
별표 뒤에도 단계가 허용되므로 "2시간마다"라고 말하고 싶다면 "*/2"를 사용하세요.
실제 동작은 명령이 2, 2, 2, 1, 2, 2, 2, 1 등의 반복 패턴으로 실행된다는 것입니다. 예를 들어 3월/4월에는 명령이 15일, 17일,18일,20일, 22일, 24일,25일, 27일, 29일, 31일,처음4월 3, 5, 7일숫자 8, 10일, 12일, 여기서 날짜는용감한전날 명령이 실행된 위치입니다.
그래서 내 질문은: 왜 이렇게 작동하며 원하는 효과를 얻을 수 있는 (간단한) 방법이 있습니까?
시스템 메시지:
root@pi:~# uname -a
Linux pi 4.9.28+ #998 Mon May 15 16:50:35 BST 2017 armv6l GNU/Linux
root@pi:~# lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 8.0 (jessie)
Release: 8.0
Codename: jessie
시스템이 24시간마다 하드 재부팅을 발생시키는 타이머에 연결되어 있다는 것은 관련이 있을 수도 있고 아닐 수도 있습니다.
답변1
*/2
요일 필드에 지정하여 짝수 요일에 실행할 수 있습니다. 심지어 요일은 월요일, 수요일, 금요일, 일요일입니다. (사실 요즘은 이상한 날들이지만 그래도...)
좀 더 정기적으로 작업을 실행하려면 월 필드(세 번째 필드)를 사용하세요. 일수가 홀수인 달에는 이로 인해 작업이뛰어 넘다다음 달에 시작되는 날:..., 28일, 30일, (31일 아님, 1일 아님), 2일, 4일 등.
짝수 달에 대한 일정과 홀수 달에 대한 별도의 일정을 추가하여 이 문제를 해결할 수 있습니다(비록 이것이 올바르게 일치하는지 여부에 대해 실제로 생각해 본 적은 없지만).
또 다른 가능성 은 at
. cron
실행 중에 다운되면 실패할 수 있습니다.
답변2
매일 실행되도록 cron 작업을 예약하겠습니다. 그런 다음 스크립트는 해당 연도의 날짜가 짝수인지 결정할 수 있습니다. 그렇지 않은 경우 종료합니다.
import datetime
today = datetime.date.today()
doy = int(today.strftime("%j"))
if (doy % 2 == 1): exit()
...