격주 화요일 오전 5시 15분에 명령을 실행하고 싶습니다. 이를 수행할 수 있는 방법이 있습니까?
답변1
화요일 05:15에 작업을 실행하는 크론 일정은 다음과 같습니다.
15 5 * * 2
또는 날짜 이름을 사용하십시오(어디에서는 지원되지 않을 수도 있음).
15 5 * * tue
일정이 실행될 때 매초마다 명령이 실행되도록 하는 가장 쉬운 방법은 크론 작업의 상태를 임시 파일로 유지하는 것입니다. 파일이 있으면 삭제되지만 작업은 다른 작업을 수행하지 않습니다. 파일이 존재하지 않으면 명령이 실행되고 작업이 파일을 생성합니다.
따라서 일정은 다음과 같습니다.
15 5 * * 2 if [ -e /tmp/statefile ]; then rm -f /tmp/statefile; else cmd; touch /tmp/statefile; fi
분명히(?) cron 일정에 의해 트리거되는 쉘 스크립트에 비즈니스 로직이 캡슐화되어 있다면 이는 더 명확해질 것입니다.
15 5 * * 2 /some/path/cron-wrapper
쉘 cron-wrapper
스크립트는 다음과 같습니다:
#!/bin/sh
statefile=/tmp/statefile
if [ -e "$statefile" ]; then
rm -f "$statefile"
exit
fi
cmd # the command we want to run
touch "$statefile"
이는 명령의 종료 상태( cmd
위 예에서)를 유지하지 않는다는 점에 유의하십시오. 예를 들어 cron이 실행 실패를 알리도록 하려면 이 작업을 수행해야 하는 경우 래퍼 스크립트가 명령의 종료 상태로 종료되는지 확인하세요.
#!/bin/sh
statefile=/tmp/statefile
if [ -e "$statefile" ]; then
rm -f "$statefile"
exit
fi
cmd # the command we want to run
err=$?
touch "$statefile"
exit "$err"
여기서 사용하려는 정확한 논리는 요구 사항에 따라 다릅니다. 예를 들어 명령이 실패할 때 상태 파일이 생성되지 않도록 하시겠습니까? 유지 관리 스크립트에 의해 지워질 가능성이 적고 다른 데이터를 덮어쓰거나 동일한 컴퓨터에서 실행되는 다른 프로젝트에 의해 덮어쓰일 가능성이 적은 안전한 위치에 상태 파일을 생성할 수도 있습니다.
이것다른이를 수행하는 방법은 유사한 질문에 대해 현재 허용되는 답변에 설명된 대로 일종의 날짜 계산 형식을 사용하는 것입니다.격주로 cron을 통해 스크립트 실행