분당 cron.d 작업이 실행되지 않는 이유는 무엇입니까?


33

나는 매분마다 파이썬 스크립트를 얻으려고 많은 다트를 던졌습니다. 그래서 분당 한 번 "작동 할 수있는 가장 간단한 작업"(데비안 / 테스트를 실행하고 있음)을 수행하기 위해 단순화한다고 생각했습니다.

나는 한 줄 파일을 만들었습니다 /etc/cron.d/perminute:

* * * * * /bin/touch /home/me/ding_dong

루트가 소유하고 있으며 실행 파일입니다 (둘 중 어느 것이 든 확실하지 않음). 그리고 나는했다 :

sudo service cron reload

그리고 앉아서 ls -ltr내 홈 디렉토리 ( /home/me) 에서 반복해서 실행을 시작 하십시오 . 그러나 내 ding_dong 파일은 절대 나타나지 않습니다. 내가하는 경우 sudo /bin/touch /home/me/ding_dong바로 나타납니다.

여기에 바보 같은 것이 빠져 있습니다.


3
cron.d의 변경 사항을 적용하기 위해 cron 데몬 서비스를 다시로드하면 일반적으로 불필요하게 매분마다 새 파일과 업데이트 된 파일이 있는지 디렉터리를 다시 검색하기 때문에 필요하지 않습니다.
Josip Rodin

답변:


45

cron 구성 을 추가 /etc/cron.d/하거나 내부에 cron 구성을 추가 할 때 /etc/crontab명령에서 컨텍스트를 실행할 사용자 이름을 추가해야합니다 (예 :

* * * * * root /bin/touch /home/me/ding_dong

그리고 나로부터 힌트 : 당신은 ls -ltr반복해서 다시 시작할 필요가 없습니다 , 그냥 사용 watch -n 5 "ls -ltr"하면 5 초마다 명령을 실행합니다 (또는 5를 원하는 것으로 바꾸면 다른 값).


9
이것은 올바른 방향으로 나아갔습니다. 이 순간이었다. 나는 그것을 고쳤지만 여전히 작동하지 않았다. man cron조금 느리게 읽고 DEBIAN specific섹션에 특별한주의를 기울인 후에 파일 이 그룹화되거나 다른 쓰기 가능 해서는 안된다는 것을 알았습니다 . 나는 어느 시점에서 좌절감을 가능하게했습니다.
트래비스 Griggs

스크립트 소유자를 루트로 변경할 수도 없습니까?
Geremia

이 특정 라인이 도움이되었습니다. From man cron: 또한 데비안에서 cron은 /etc/cron.d 디렉토리의 파일을 읽습니다. cron은 /etc/cron.d의 파일을 / etc / crontab 파일과 같은 방식으로 처리합니다 (이 파일의 특수 형식을 따릅니다 (예 : user field 포함 )). 그러나 이들은 / etc / crontab과 독립적입니다. 예를 들어 환경 변수 설정을 상속하지 않습니다. 이 변경 사항은 데비안 전용입니다. 아래의 DEBIAN SPECIFIC 아래의 참고 사항을 참조하십시오.
harperville

man 8 cron (Debian)은 /etc/cron.d/의 파일은 영숫자 문자 '-'와 '_'만 포함 할 수 있다고 말합니다. 특히, 점이 없습니다.
mpartel

3

cron작업 을 작성하려면 작업을 실행 crontab -e하려는 사용자로 실행해야합니다 . 그런 다음 나타나는 편집기 창에 관련 줄을 추가하십시오.

* * * * * /bin/touch /home/me/ding_dong

당신이 그것을하는 방식은 다른 형식이 필요하며 실제로는 좋은 생각이 아닙니다. Crontab은 /etc/cron.d형식이 약간 다르므로 사용자 이름을 실행해야합니다. 예를 들면 다음과 같습니다.

* * * * * USERNAME /bin/touch /home/me/ding_dong

@VogonPoetLaureate가 제안한 좋은 트릭은 cron 작업의 표준 오류를 캡처하여 디버그하는 데 도움이 될 수 있습니다. 예를 들면 다음과 같습니다.

* * * * * /bin/touch /home/me/ding_dong 2>/tmp/error

6
cron.d가 "좋은 생각이 아닙니다"라고 말할 이유는 없습니다. cron 데몬은 cron.d stderr 출력을 사용자 이름으로 메일로 보내며 다른 전자 메일 주소로 리디렉션하려는 경우 MAILTO 변수를 사용할 수 있습니다.
Josip Rodin

@JosipRodin 루트에 의해 실행되지 않고 사용자가 설정 한 것은 좋지 않습니다. 다중 사용자 시스템의 시스템 관리자에게는 적합하지만 자신의 컴퓨터 crontab -l에서는 모든 cron 작업 을 확인하고 나열 할 곳이 하나뿐이므로 자신의 crontab에 모든 항목을 포함하는 것이 더 간단합니다 .
terdon

그것은 실제로 개인 cron 작업이라고 가정하고 OP가 실제로 명확하지 않은 것으로 가정합니다. 일반적으로 cron.d를 통해 권한이없는 사용자 cron 작업을 설정하는 것과 같은 수많은 응용 프로그램이 있습니다. 으로 격리 된 서비스 사용자, 자동화 된 배포 등을 쉽게
요시프 로댕

@JosipRodin 절대적으로. 나는 i) 엔터프라이즈 시스템이 여기서 다루지 않는 주제이고 ii) 전문가가 아닌 사용자를 제안했기 때문에 개인 시스템을 가정했습니다.
terdon

OK, 나는 더 이상 때문에 : 수퍼 유저와 저기 serverfault와 유닉스 SE 사이트에 공통 혼란의로 읽을 생각
요시프 로댕

2

여기 가능한 실수는 어떻게 한 줄의 파일이 생성됩니다. 에서 우분투 문서화 :

... line에는 5 개의 시간 및 날짜 필드와 명령, 개행 문자가 있습니다.

예를 들어,이 방법으로 작동하지 않습니다 :

printf "* * * * * /bin/touch /home/me/ding_dong" > /etc/cron.d/ding_dong
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.