/etc/cron.d에있는 동안 Crontab이 실행되지 않습니다


32

Debian Jessie에서 내가 한 일은 다음과 같습니다.

  • 통해 cron 설치 apt-get install cron
  • backup_crontab파일을 넣다/etc/cron.d/

그러나 작업이 실행되지 않습니다.

다음은 몇 가지 출력입니다.

/# crontab -l
no crontab for root

/# cd /etc/cron.d && ls
backup_crontab

/etc/cron.d# cat backup_crontab
0,15,30,45 * * * * /backup.sh >/dev/null 2>&1

특정 crontab을 활성화하거나 cron "서비스"자체를 활성화하기 위해해야 ​​할 일이 있습니까?


4
모든 출력을 / dev / null로 리디렉션하기 때문에 보이지 않고 오류가 발생하여 실패하면 어떻게됩니까? :)
tink

@tink 대신 파일 끝에 출력을 추가 할 수 있습니까?
Jivan

2
당연히; 0,15,30,45 * * * * /backup.sh >> / tmp / testing_cron.out 2> & 1
tink

@Jivan, 작은 메모 : 출력면에서 ls /etc/cron.d동등합니다 cd /etc/cron.d && ls. 유일한 차이점은 작업 디렉토리가 변경되지 않는다는 것입니다.
Drew Chapin

답변:


49

/etc/cron.d필요한 파일 은 작업을 실행할 사용자 를 나열해야합니다 .

0,15,30,45 * * * * root /backup.sh >/dev/null 2>&1

그룹 올바르게 설정 (위치 : 또한 권한과 소유자가 확인해야 -rw-r--r--하고 소유 root:root)


16
crontab -lcron 항목, /var/spool/cron/crontabs/사용자 별 crontab 에 대한 보고서 . /etc/cron.d파일은 시스템 크론 탭이며로보고되지 않습니다 crontab -l.
Stephen Harris

5
실제로 나는 그것이 작동 하지 않는다고 언급했지만 root파일에 파일 을 추가 한 후 -파일을 crontab -l언급하지 않은 것을 깨달았습니다. 왜 당신이 설명했는지-도움을 주셔서 감사합니다.
Jivan

9
파일 이름에도 역할이있는 것 같습니다. 내 경우 etc/cron.d에는 이름 중간에 점이있는 파일에 추가 했으며 이름을 바꿀 때까지 작업이 실행되지 않았습니다.
사진

20
여기에서 같은 문제가 발생하면 파일 이름에 대시 "-"가 밑줄 "_"로 변경되어 문제가 해결되고 작업이 즉시 실행되었습니다.
Rob

1
나는 또한 대시를했다 ... 무엇 .... 왜?! 어쨌든, @Rob에게 감사합니다
Nikolay Dimitrov

8

내가 관찰 한 또 다른 것은 파일 /etc/cron.d의 확장자를 가질 수 없다는 것입니다. 내 특별한 경우에는 상징적 인 링크가있었습니다.

# my-job.crontab
* * * * * root echo "my job is running!" >> /tmp/my-job.log

$: ln -sf /home/me/my-job.crontab /etc/cron.d/
# This did not work -> job would not run

$: ln -sf /home/me/my-job.crontab /etc/cron.d/my-job
# This did work -> job ran fine

파일 이름 제한은 run-part 매뉴얼 페이지 ( http://manpages.ubuntu.com/manpages/xenial/man8/run-parts.8.html )에 설명되어 있으며 --regex 옵션을 전달하여 파일 형식을 무시할 수 있습니다.

그러나 기본 크론 동작은 확장명없이 유지됩니다. https://bugs.launchpad.net/ubuntu/+source/debianutils/+bug/38022 아래의 주석을 참조하십시오.


넌 내 하루를 구했어!
elboletaire

2
이것은 우분투에서 정확합니다 (모든 데비안에서 파생 된 배포판에있을 수 있음). Amazon Linux (및 아마도 모든 Redhat 파생 배포판)에서 파일 이름에 점이있을 수 있습니다. Unix.SE 감사합니다.
법률 29

방금 순수한 데비안을 확인했는데 점이 작동하지 않습니다. 대시는 작동합니다 (위의 의견과 달리).
법 29

4

아마 당신은 아마도 cron 파일의 끝에서 필요한 빈 줄이 누락 된 것 같습니다. 나는 같은 문제가 있었지만 여기에 나열된 모든 것 (사용자 권한, 파일 이름, cron 버전 등)을 확인한 후 마지막 항목 이후 줄 바꿈이 없으며 /etc/cron.d/own_cron전체 파일이 무시 된다는 것을 알았습니다 .


2

이 컴퓨터의 유일한 사용자 인 경우을 사용하는 것이 crontab -e좋습니다. 명령을 처음 실행할 때 편집기를 선택하라는 메시지가 표시됩니다. 그런 다음 이것을 추가 할 수 있습니다.

0,15,30,45 * * * * /backup.sh >/dev/null 2>&1

일반 사용자 계정으로 변경하는 경우 sudo crontab -e으로 실행되도록 예약하려는 스크립트를 구성하는 데 사용해야 합니다 root.

crontab -l를 사용하여 설정하면 현재 crontab 만 표시됩니다 crontab -e. /etc/cron.d/에 cron 파일이 있으면 로 표시되지 않습니다 crontab -l.

또한 다음을 사용하여 스크립트가 실행 가능한지 확인해야합니다 chmod +x /backup.sh.


1
덕분에 -이 경우에는 crontab을은의 맥락에서 설정되어 Dockerfile정말 할 수 없도록 crontab -e-하지만 어쨌든 유용한 정보입니다
Jivan

2

Raspbian과 같은 * bian 배포판 -l의 Cron의 경우 Cron 데몬 의 매개 변수 를 활성화해야합니다 . /etc/default/cron구성 파일을 사용 하여을 활성화하는 것이 좋습니다 EXTRA_OPTS.


이것은 하향식이지만 설명되지는 않았지만 경우에 따라 정확합니다. 데비안 기반 배포판에서 -lcron 데몬에 대한 옵션은 /etc/cron.d디렉토리 에 확장 된 파일 이름 세트를 부여 하므로 파일에 점이있어 파일이 자동으로 무시되는 경우 "-adding -l"또는 "removing dot" 문제를 해결합니다.
법률 29

1

의 버전을 확인하십시오 cron.

Dillon의 크론을 사용하는 경우 /etc/cron.d항목에 사용자가 필요하지 않은 것 같습니다 .

나는 남은 머리카락을 거의 뽑아 낸 후에 이것을 알아 냈습니다.

/etc/cron.d다양한 설치로 인해 삭제 된 소수의 항목이 있습니다 . 조사한 결과 그들 중 하나가 작동하고 있음을 알았습니다. 사용자가 없었습니다. 그래서 나는 사용자를 다른 사람들로부터 꺼내었다. 그리고 그들은 일하기 시작했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.