업데이트(그리고끊다) 자세한 내용은 아래를 참조하세요.
cron 스크립트를 설정했는데 왜 실행되지 않는지 디버깅하려고 합니다.[컨텍스트 테스트를 중단하세요. 모두 작동합니다.개정 2 참조세부]도움이 되는 경우 명령 자체는 다음과 같습니다(화살표는 쉽게 읽을 수 있도록 줄 바꿈을 나타냄).
/usr/bin/php -C /etc /path/to/process.php
↪ >>/path/to/stdout.log 2>>/path/to/stderr.log
[권한 테스트가 중단되었습니다. 아래를 참조하세요.개정 2세부]
(다시 한번 가독성을 위해 래핑하여) 확인하면 crontab
다음과 같은 결과를 얻습니다.
[blackero@XXXXXXXXXXX to]$ sudo crontab -u cronuser -l
MAIL="blackero@localhost"
30 9 * * * cronuser /usr/bin/php -C /etc /path/to/process.php
↪ >>/path/to/stdout.log 2>>/path/to/stderr.log
20 18 7 * * cronuser /usr/bin/php -C /etc /path/to/process.php
↪ >>/path/to/stdout.log 2>>/path/to/stderr.log
22 18 7 * * cronuser echo "Test" > /path/to/test.txt
↪ 2> /path/to/error.txt
업데이트 #12012-02-08 12:32 Z
[스크린샷: 이미 시도했습니다.드 로버트~의제안(개정 3)]cronuser
, 스크립트를 올바르게 실행할 수 있고 두 파일 모두에 쓸 수 있다는 것을 알고 있습니다 .log
. (스크립트가 수행하는 첫 번째 작업 process.php
은 FTP를 통해 파일을 다운로드하는 것입니다. 이 작업도 성공적으로 수행됩니다.) 그러나 해당 MAIL=""
줄을 수정한 후에도(삭제하고 MAILTO="blackero@localhost"
실행되도록 변경하면 나에게 어떤 이메일도 보내지 않습니다.)
친구가 다시 시도해 보라고 제안했습니다.
9 12 8 * * cronuser /bin/echo "Test" > /var/www/eDialog/test.txt
↪ 2> /var/www/eDialog/error.txt
방금 /bin/echo
시도했지만 작동하지 않았고 이메일도 생성되지 않아서 당황했습니다.
업데이트 #2게시일: 2012-02-08 19:15 Z
매우 유용한 채팅 대화그리고옥슬린, 문제가 있는 것 같습니다 pam
. cron
작업을 실행하려고 할 때 마다 /var/log/cron
다음 항목이 표시됩니다.
crond[29522]: Authentication service cannot retrieve authentication info
crond[29522]: CRON (cronuser) ERROR: failed to open PAM security session: Success
crond[29522]: CRON (cronuser) ERROR: cannot set security context
다음 줄을 추가하여 이 문제를 해결했습니다 /etc/shadow
.
cronuser:*:15217:0:99999:7:::
내가 알아낸 대로포럼에서/etc/shadow
, 사용자 가 없으면 pam
보안 요청이 계속 처리되지 않습니다. 두 번째 열로 추가한다는 것은 *
사용자가 비밀번호를 사용하여 로그인할 수 없음을 의미합니다(해시가 지정되지 않았기 때문에). 문제를 해결하면 에서 다른 오류가 발생하므로 /var/log/cron
자세히 조사한 결과 crontab
매번 사용자 이름을 지정했음을 발견했습니다.
정정하면 내가 crontab
지금 읽은 내용은 다음과 같습니다.
[blackero@XXXXXXXXXXX ~]$ sudo crontab -u cronuser -l
MAILTO="blackero@localhost"
30 9 * * * /usr/bin/php -C /etc /path/to/process.php
↪ >>/path/to/stdout.log 2>>/path/to/stderr.log
52 18 8 * * /usr/bin/php -C /etc /path/to/process.php
↪ >>/path/to/stdout.log 2>>/path/to/stderr.log
9 12 8 * * /bin/echo "Test" > /path/to/test.txt
↪ 2> /path/to/error.txt
하지만 /var/log/cron
지금 보여주세요:
Feb 8 18:52:01 XXXXXXXXXXX crond[16279]: (cronuser) CMD (/usr/bin/php -C /etc
↪ /path/to/process.php >>/path/to/stdout.log 2>>/path/to/stderr.log)
그리고 아무 것도 stdout.log
또는 에 들어 가지 않습니다 stderr.log
. 메일이 나에게 전송되지 않았고 /var/log/
다른 파일의 항목 중 어느 것도 올바른 시간 프레임에 있지 않았으며 무엇이 잘못되었는지 확인하려면 어디를 봐야 할지 아이디어가 부족합니다.
답변1
먼저 cron 작업이 실패하면 cron이 이메일을 보냅니다. 기본적으로 이는 크론 작업의 소유자입니다. 따라서 이러한 이메일은 cronuser@localhost 또는 root@localhost로 전송될 수 있습니다. 해당 이메일을 확인하세요. 또는 MAILTO=email@domain
crontab 파일 상단에 메일을 보낼 위치를 지정할 수도 있습니다 . (실제로는 MAIL=""
crontab의 맨 위에 두신 것으로 보입니다 . 적어도 man 5 crontab
내 기계에 따르면 거기에 있어야 합니다 MAILTO
. 그리고 당신은아니요작동하지 않는 이유를 알아내려고 할 때 오류 메시지를 버리고 싶습니다! )
둘째, cron이 사용됩니다 /bin/sh
. bash 확장이 필요한 경우 이를 설정합니다 SHELL=/bin/bash
(다시 crontab 위에).
셋째, 아직 전체 테스트 권한이 없습니다. 다음과 같은 작업을 수행해야 합니다.
# su -s /bin/sh -u cronuser
$ touch /path/to/stdout.log
$ touch /path/to/stderr.log
$ cat /path/to/process.php > /dev/null
$ exit
권한을 철저히 확인하세요. cronuser
예를 들어 +x가 상위 디렉터리에 없을 수 있습니다. (/usr/bin/php도 확인해야 할 것 같은데 그게 정상인 것 같아요)
최소 환경에서 명령을 실행해 볼 수도 있습니다.
# su -s /bin/sh -u cronuser
$ env - /bin/sh
$ /usr/bin/php -C /etc /path/to/process.php
작동하는지 확인하세요.
답변2
달리기 crond
?
다음 명령 중 하나를 시도해 보십시오.
pidof crond
pgrep -l crond
ps caxf | grep -6 crond --color
마지막 명령의 출력:
11881 ? S 0:00 \_ httpd
11882 ? S 0:00 \_ httpd
11883 ? S 0:00 \_ httpd
11884 ? S 0:00 \_ httpd
11885 ? S 0:00 \_ httpd
11886 ? S 0:00 \_ httpd
2098 ? Ss 0:01 crond #this 'crond' is in red
2125 ? Ss 0:00 sudoscriptd
2127 ? Ss 0:00 \_ sudoscriptd
2136 tty2 Ss+ 0:00 mingetty
2137 tty3 Ss+ 0:00 mingetty
2138 tty4 Ss+ 0:00 mingetty
2139 tty5 Ss+ 0:00 mingetty
구성은 무엇입니까 crond
?
/etc/rc.d/init.d
시작 파일 을 확인하십시오 /etc/init.d
.
구성을 crond
나열할 수 있습니다.거절당하다또는/및허용하다사용자.
이 사람이 귀하의 사용자입니까?거절당하다? 다음 파일을 확인하세요.
/etc/cron.allow
/etc/cron.deny
두 파일 모두 존재하지 않으면 루트만허용하다. 존재하지 않고
비어 있으면 모든 사용자가cron.allow
cron.deny
허용하다기본적으로.
이 파일은 /etc/crontab
루트만 쓸 수 있어야 합니다.
$ ls -l /etc/crontab
-rw-r--r-- 1 root root 255 Jul 15 2006 /etc/crontab
뭐라고 crond
?
정보를 받는 자연스러운 방법 crond
은 지역 메일입니다. crond
일반적으로 사용됩니다 sendmail
. sendmail
사용할 수 없는 경우 다른 메일 명령을 지정할 수 있습니다( CRONDARGS="-mmail"
).
crond
하지만 이 단계에서는 직접 로그를 확인하는 것이 가장 좋습니다 ( ll /var/log/cron*
).
재시작crond
이 문제는 반복해서 해결될 수 있습니다 crond
.
문제가 지속되면 다시 재부팅하기 전에 init.d
또는 없이 실행 service
하고 다른 옵션을 시도해 보겠습니다.
sudo 크론드 -p -x sch
그리고 로그파일을 다시 확인해 보세요 crond
...