매일 cron 작업이 실행되고 있지 않습니다


10

빠른 개요 : SVN의 소스 코드 저장소를 해당 날짜의 tarball로 매일 백업하는 스크립트가 있습니다. 스크립트를 테스트했으며 출력 디렉토리의 소유권으로 인해 sudo로 실행하는 한 매우 잘 작동합니다.

그래서 문제는 매일 이것을 실행하고 싶다는 것입니다. 그래서 /etc/cron.daily 디렉토리에 링크를 넣습니다. 디렉토리 내용은 다음과 같습니다.

thom@spenser:/etc/cron.daily$ ls -l
total 60
-rwxr-xr-x 1 root root   189 2011-09-14 02:21 apport
-rwxr-xr-x 1 root root 15535 2011-10-06 11:30 apt
-rwxr-xr-x 1 root root   314 2011-08-08 16:57 aptitude
lrwxrwxrwx 1 root root    24 2012-02-28 11:05 backup -> /usr/local/bin/backup.sh
-rwxr-xr-x 1 root root   502 2011-06-08 11:48 bsdmainutils
-rwxr-xr-x 1 root root   256 2011-10-06 04:04 dpkg
-rwxr-xr-x 1 root root   372 2011-10-04 16:50 logrotate
-rwxr-xr-x 1 root root  1353 2011-07-27 07:17 man-db
-rwxr-xr-x 1 root root   606 2011-08-17 09:16 mlocate
-rwxr-xr-x 1 root root   249 2011-06-24 05:36 passwd
-rwxr-xr-x 1 root root  2417 2011-07-01 17:25 popularity-contest
-rwxr-xr-x 1 root root   383 2011-09-30 15:09 samba
-rwxr-xr-x 1 root root  3594 2011-09-19 20:07 standard
thom@spenser:/etc/cron.daily$ 

문제는 단순히 실행되지 않는다는 것입니다. 해당 스크립트에 대한 권한은 다음과 같습니다.

thom@spenser:/etc/cron.daily$ ls -l /usr/local/bin/backup.sh 
-rwxr-xr-x 1 root root 260 2012-02-28 11:03 /usr/local/bin/backup.sh

아이디어?


2
가능하면 최선의 답변 (있는 경우)을 선택하여 다른 열린 질문 중 일부를 닫는 것이 좋습니다. 사이트가 문제가있는 다음 사람에게 효과적인 도구가 될 수 있도록 사용자는 질문을 유지해야합니다. 모범 사례에 대한 자세한 내용 은 질문과 관련된 FAQ 를 참조하십시오 .
Bruno Pereira

답변:


37

이것을 시도

run-parts --test /etc/cron.daily

내 파일 update.ubuntu가 나타나지 않는 것을 발견했습니다. 또한 내 파일의 확장자 (점에 있음)가 있음을 알았습니다.

이 문제를 해결하는 단계

  1. update.ubuntu의 이름 을 update-ubuntu 로 변경했습니다.
  2. 이번에도 run-parts --test /etc/cron.daily내 파일이 나왔습니다!

1
예,이 문제가 해결되었습니다. 파일 이름의 점이 마음에 들지 않아 myscript.sh에서 myscript로 파일 이름을 바꾸면 나에게 도움이되었습니다.
Matt Parkins 2016 년

3
더 높아야합니다. 스크립트를 전통적인 "backup.sh"로 저장했습니다. ".sh"부분을 제거하면 해결되었습니다. 정말 감사합니다!
David

감사! 일일 cron에서 .sh 파일을 암시 적으로 제거하기로 결정한 사람 / 녀석은 부끄러워해야합니다!
Sylvain

공개적으로 막아야합니다! ;-)이 결정으로 인해 사람들이 총체적으로 얼마나 많은 시간을 잃었는지 궁금합니다. 또한 그럴만한 이유가 있는지 궁금합니다.
xastor

3

여러 가지 중 하나 일 수 있습니다.

뿌리 경로 :

실행중인 명령에 따라 crontab 파일 맨 위에 다음 행을 넣어 루트 사용자 PATH 변수를 확장해야 할 수 있습니다.

PATH = / usr / sbin : / usr / bin : / sbin : / bin

src : https://help.ubuntu.com/community/CronHowto

또는 스크립트에서 각 명령의 전체 경로를 사용하십시오 ( 예 : /bin/ls대신) ls. ( which ls경로의 명령 행에서).

여기에보고 파일 이름에 점에 대한 이상한 버그 . 링크 된 파일로 확장 될 수 있지만 가능성은 낮습니다.

백업 파일의 출력을 저장합니까? 첫 번째 줄에 이와 같은 것을 넣으면 전혀 실행되지 않거나 특정 시점에서 실패하는지 확인할 수 있습니다.

/bin/echo "Attempting to run backup" >> /path-to-home/backup.log

또는 스크립트를 crontab 파일에 직접 추가하십시오.

sudo -i
crontab -e
[add the next line to the file, then save and exit]
33 15 * * * /usr/local/bin/backup.sh

기계가 켜져 있으면 매일 15:30에 실행됩니다. 테스트하는 동안 * * * * *를 사용하면 작동 할 때까지 1 분에 한 번 실행됩니다.


1
스크립트에서 절대 경로를 사용하지 않는 것이 좋습니다. PATH가 무엇인지 모르는 경우 스크립트에서 직접 설정하십시오. crontab이 작동하지 않는 이유
geirha

유용한 링크, 감사합니다. 전체 경로를 사용하지 않는 주어진 이유는 이식성입니다. 그럴 수 있지. 또 다른 합리적인 해결책은 스크립트 시작시 사용중인 명령을 다른 구성과 함께 정의하는 것입니다. LS = / bin / ls; SRC_DIR = / home / joe / src. 그런 다음 $ LS $ SRC_DIR을 사용하십시오. 모든 것을 맨 위와 한 곳에 정의합니다.
Sean

가독성을 줄이려면 실행해야 할 모든 새 시스템에 대해 모든 COMMAND = / path / to / command를 거쳐야합니다. 한 시스템에서 필요한 모든 명령은 / usr / bin에 있고 다른 명령은 / bin에 있고 다른 명령은 / usr / bin에있을 수 있습니다. PATH에 / usr / bin과 / bin을 둘 다 있으면 문제가되지 않습니다. 참고로 변수 이름은 소문자 여야합니다. 그렇지 않으면 특수 쉘 변수 또는 환경 변수를 재정의 할 위험이 있습니다.
geirha

re : 대문자 변수 이름. 나는 그것을 처음 본 대본으로 인해 많은 생각없이 항상 그렇게했습니다. 그러나 당신은 옳습니다, 단점은없고 단점도 있습니다. 이것을 지적 해 주셔서 감사합니다. 지금이 습관을 깨십시오.
Sean

1

syslog에 다음과 같은 메시지가 있는지 확인하십시오.

crond: (*system*) BAD FILE MODE

644에서 파일을 제한해야합니다 (충분한 경우).

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