테스트 / 디버깅을 위해 어떻게 cron을 작업으로 실행할 수 있습니까? 일정을 바꾸지 않고!


133

일정을 변경하는 것 외에 매일 실행되도록 예약 된 cron 작업이 있는데, 명령이 제대로 작동하는지 확인하기 위해 현재 명령의 테스트 실행을 수행 할 수있는 다른 방법이 있습니까?


귀하의 질문을 이해하지 못합니까? 왜 단순히 명령을 실행하지 않습니까?
favadi

20
셸 (내 셸)에 입력하면 명령이 작동한다는 것을 알고 있지만 cron실행할 때 작동하는지 알고 싶습니다. ENV 또는 셸 관련 항목 ( ~확장) 또는 소유권 및 권한에 영향을 받거나 ...
알리

2
그렇다면 동일한 명령으로 매분마다 새로운 cron 작업을 생성하지 않겠습니까?
favadi

13
이것은 내가 끝내는 일이지만, cron에게 작업 번호 7에서 테스트 실행을 원한다고 말할 수있는 방법이 있는지 궁금합니다! 분명히 다른 사람들은 전에이 문제 / 요청 / 소원을 가졌습니다!
Ali

4
구글을 통해 여기에 매우 늦었지만 favadi의 답변에 관한 모든 것이 잘못되었습니다. 그는 cron에서 그것을 테스트하기 위해 crontab을 편집하지 않고 그것을 테스트하고 싶었습니다. 그들이 유스 케이스를 이해하려고 시도하지 않았을 때 당신이 원하는 것을 잘못 알려주는 사람보다 훨씬 나쁩니다.
HörmannHH

답변:


32

내가 아는 한 cron에는 특별한 목적이 있기 때문에 직접 수행 할 수있는 방법이 없습니다. 실행은 특정 시간에 명령을 예약합니다. 따라서 가장 좋은 방법은 crontab 항목을 수동으로 만들거나 환경을 제거하고 재설정하는 스크립트를 작성하는 것입니다.


57

다음 명령으로 crontab을 강제로 실행할 수 있습니다.

run-parts /etc/cron.daily

9
... OP의 크론 작업 (3 년 전 요청)이 개별 크론 탭과 달리 cron.daily에 있다고 가정합니다.
Jeff Schaller

18
이것은 cron 사용자 환경을 완전히 시뮬레이션하지는 않으므로 스크립트를 실제 cron 작업으로 실행 한 후에는 PATH 및 기타 envvar가 사용자와 다른 경우가 있기 때문에 여전히 버그가있을 가능성이 높습니다 run-parts /etc/cron.daily. 내 스크립트가 제대로 실행 run-parts되지만 실제로 cron 사용자가 실행할 때 실패 하므로이 버그를 해결 하고 있습니다.
ArtHare

42

"크론 작업을 수동으로 즉시 실행"에 설명 된대로 크론 사용자 환경을 시뮬레이션 할 수 있습니다 . 이를 통해 cron 사용자로 실행될 때 작업이 작동하는지 테스트 할 수 있습니다.


링크에서 발췌 :


1 단계 :이 줄을 사용자의 crontab에 임시로 넣었습니다.

* * * * *   /usr/bin/env > /home/username/tmp/cron-env

그런 다음 파일이 작성되면 꺼 냈습니다.

2 단계 : 나 자신을 크론 bash 스크립트로 만들었습니다.

#!/bin/bash
/usr/bin/env -i $(cat /home/username/tmp/cron-env) "$@"

그래서 문제의 사용자로서

run-as-cron /the/problematic/script --with arguments --and parameters

유용한 트릭. 물론 명령에 백분율 기호가 있으면 도움이되지 않습니다.
basic6
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.