루트 crontab이 실행되지 않습니다

루트 crontab이 실행되지 않습니다

저는 crontab, mysqldump 유틸리티 및 gunzip을 사용하여 데이터베이스를 백업하도록 Debian 서버를 설정하고 있습니다.

어떤 이유에서든 내 crontab 라인이 실패한 것 같습니다. 특히 중요한 라인은 다음과 같습니다.

15 2 * * * /usr/bin/mysqldump --user=root --password=XXX --all-databases | /bin/gzip > /backup/database_`date '+%d-%m-%Y'`.sql.gz

이 동작의 가능한 원인에 대해 여러 가지 주제를 읽었지만 여전히 이 crontab 작업이 다음 후에도 파일을 생성하지 못하는 이유를 알 수 없습니다.

  • 루트 권한 사용: sudo crontab -e루트 crontab을 편집하는 데 사용합니다.
  • whereis를 사용하여 내가 사용 중인 명령의 전체 경로를 찾았습니다. 예를 mysqldump들어 /usr/bin/mysqldump.
  • 전체 라인이 루트에서 작동하는지 확인했습니다. 오늘 날짜로 아카이브를 생성하고 mysqldump 결과로 채워집니다(CLI에서 비밀번호를 사용하고 있기 때문에 경고가 표시되지만 이것이 문제를 일으킬 것이라고 생각하지 않습니다). crontab을 사용하는 거죠?)

crontab에서 이 줄을 구성하는 방식에 문제가 있는 것 같은데 볼 수 없습니다.

분명히 crontab은 제대로 작동하고 있습니다. 왜냐하면 행을 추가하면 * * * * * env > /backup/env.txt/backup 폴더에 env 콘텐츠가 포함된 파일이 생기기 때문입니다.

누군가 이것에 대한 단서를 가지고 있습니까?

감사합니다 !

~스테판

답변1

cron의 기본 경로는 다음과 같습니다.

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

유틸리티 는 다음 date위치에 있으므로 /bin/다음 중 하나를 수행해야 합니다.

  1. 이 디렉토리를 PATHfor 에 명시적으로 추가하세요.cron

    PATH=/bin/:/usr/bin:/usr/sbin:.
    15 2 * * * mysqldump --user=root --password=XXX --all-databases | gzip > /backup/database_$(date '+%d-%m-%Y').sql.gz
    

또는

  1. 명령 의 전체 경로를 제공하십시오 date.

    15 2 * * * /usr/bin/mysqldump --user=root --password=XXX --all-databases | /bin/gzip > /backup/database_$(/bin/date '+%d-%m-%Y').sql.gz
    

두 번째 방법을 사용하면 실수하기가 너무 쉽고 모든 명령에 대한 전체 경로(예: date질문)를 제공하는 것을 잊어버리기 때문에 첫 번째 옵션을 선호합니다.

답변2

좋아, 나에게 맞지 않는 것을 찾았습니다.

를 추적하면서 /var/log/syslogcrontab에 줄 크기 제한이 있다는 것을 발견했습니다! 따라서 해당 줄을 읽을 때 거기서 멈추고 ... $(date +'실행 시 해당 줄이 "버그"가 됩니다.

내 해결책은 작업을 /root/backup.sh 스크립트로 이동하고 다음을 사용하여 crontab을 편집하는 것이었습니다.

15 2 * * * /root/backup.sh

적어도 이제는 데이터를 백업할 수 있습니다!!

이 솔루션이 다른 사람들에게 도움이 되기를 바랍니다.)

관련 정보