내 cronjob이 쉘 스크립트를 실행하지 않는 이유는 무엇입니까? [폐쇄]

내 cronjob이 쉘 스크립트를 실행하지 않는 이유는 무엇입니까? [폐쇄]

매일 밤 데이터베이스 덤프를 생성하는 crontab이 있습니다.

20 3 * * * /path/to/dailydump.sh

dailydump.sh포함하다:

#!/bin/sh

DATENAME=`date +%Y%m%d`

BASENAME="/path/to/dumps/db_${DATENAME}.sql"

/usr/bin/mysqldump -hhost -uusername -ppassword databasename > ${BASENAME}

권한은 다음과 같습니다:

-rwx---r-x 1 ... dailydump.sh
drwxr-xrwx 2 ... dumps

내 cronjob이 작동하지 않는 이유는 무엇입니까?

루트 액세스 권한 없이 공유 서버에 있습니다. 로그인이 안 /var/log/cron되었거나 /var/log/syslog. /var/mail/<user_name>또는에서 메일이 없고(실제로 /var/spool/mail/<user_name>및에서 전혀 메일이 없습니다) 오류 메시지가 메일로 전송되지 않으며 로그 파일이 저장되지 않습니다. 아무것도 반환하지 않습니다. (바라보다/var/mail//var/spool/[email protected]1 2 * * * /path/to/your/command &>/path/to/mycommand.logps -ef | grep cron | grep -v grep?https://serverfault.com/a/449652)

모든 파일을 새 도메인으로 이동하고 새 crontab을 설정해야 할 때까지는 전체 설정이 제대로 작동했습니다. (예, 모든 경로와 데이터베이스 로그인을 업데이트했습니다. 그것도 여러 번 확인했습니다.) 동일한 호스팅 공급자와 동일한 컴퓨터에 있으므로 환경이 변경되지 않았습니다.

어떤 도움이라도 대단히 감사하겠습니다.


"해결책"

글쎄요, 이게 제일 이상해요. 내 공급자의 도움말 센터에서는 cronjob에 의해 실행되는 스크립트가 비밀번호로 보호된 디렉터리에 있는 경우 -auth=user:password -source스크립트 경로를 앞에 추가해야 한다고 말합니다. 그래서 다음을 추가했습니다(올바른 인증 포함).

20 3 * * * -auth=user:password -source /path/to/dailydump.sh

밝혀지다나에게 오류 메시지를 이메일로 보냈습니다.(매우 MAILTO=효과적입니다) /bin/sh: -=: invalid option사용 가능한 옵션을 알려주고 나열하십시오. 헬프센터 예시에서는 실제로 물리적인 경로( /path/to/file)가 아니라 URL( http://...)만 알려주어서 크론탭을 삭제 auth하고 다시 저장했고,source이제 망할 cronjob이 실행 중입니다!"crontab은 문자별로 이전과 똑같아 보이지만 이제는 눈에 띄는 코드 변경 없이 실행됩니다.

무엇이 문제인지는 모르겠지만, 잘못된 코드를 삽입하고 다시 삭제하니 문제가 해결되었습니다. o_O는 실제로 cronjob처럼 보입니다.했다항상 실행됩니다(실행되지 않으면 분명히 오류가 발생하기 때문입니다).아무것도 하지 않았어요!매우 신비 롭습니다. 누군가 나에게 이것을 (재현 가능한 방식으로) 설명할 수 있다면 나는 현상금 200을 제공하고 (필요한 이틀을 기다린 후) 수여할 것입니다.

또는 @chaos는 쉘 스크립트를 완전히 피하고 cron이 데이터베이스를 직접 덤프할 수 있는 또 다른 솔루션을 제공했습니다(아래 답변에 대한 설명 참조).

20 3 * * * /usr/bin/mysqldump -hhost -uusername -ppassword 데이터베이스 이름 > /path/to/dumps/db_$(date +\%Y\%m\%d).sql

백분율 기호를 이스케이프하는 것을 잊지 마세요. 그렇지 않으면 스크립트가 "예기치 않은 EOF"를 발견하게 됩니다.

모두의 도움에 감사드립니다. 나는 다시 많은 것을 배웠습니다(여기서 잘못된 것이 없다는 것은 아닙니다).

답변1

cron데몬이 실행 중이고 이를 준수하는지 확인하려면 crontab간단한 테스트를 실행할 수 있습니다. crontab다음과 같은 항목으로 편집하세요.

* * * * * /bin/date >>/tmp/test

1분 후에 /tmp/test.txt 파일을 확인하십시오. 파일이 없으면 데몬이 실행되지 않을 가능성이 높습니다. 이 경우에는 제공업체의 지원팀에 문의하겠습니다.

편집하다:

cron 인스턴스의 환경을 확인하려면 다음을 수행해야 합니다.

* * * * * /usr/bin/id >>/tmp/test
* * * * * /usr/bin/env >>/tmp/test

이제 파일의 내용을 봅니다.

답변2

  1. 스크립트를 직접 실행하여 작동하는지 확인합니다.
  2. 스크립트가 crontab에서 실행될 때 스크립트 설정 방법에 따라 일부 쉘 환경 변수를 사용하지 못할 수 있습니다.

환경 변수가 문제인지 테스트하려면 스크립트를 수정해 보세요.

sh --login -c "/usr/bin/mysqldump -hhost -uusername -ppassword databasename > ${BASENAME} >  /path/to/LogFile.txt 2>&1"

관련 정보