백업 스크립트가 cron 작업에서 실행 중이지만 백업이 생성되지 않습니다.

백업 스크립트가 cron 작업에서 실행 중이지만 백업이 생성되지 않습니다.

명령줄에서 백업 스크립트를 수동으로 실행하면 정상적으로 작동합니다. 문제의 백업이 생성되지 않았습니다. crontab 로그에서 오전 2시에 실행 중인 백업 항목을 볼 수 있습니다 /home/sgaddis/copy-production-db.sh.

Dec 23 01:01:01 mapehr anacron[11921]: Anacron started on 2019-12-23
Dec 23 01:01:01 mapehr anacron[11921]: Normal exit (0 jobs run)
Dec 23 01:01:01 mapehr run-parts(/etc/cron.hourly)[11923]: finished 0anacron
Dec 23 02:00:01 mapehr CROND[14869]: (sgaddis) CMD (sgaddis /bin/bash /home/sgaddis/copy-production-db.sh)
Dec 23 02:01:01 mapehr CROND[14934]: (root) CMD (run-parts /etc/cron.hourly)
Dec 23 02:01:01 mapehr run-parts(/etc/cron.hourly)[14934]: starting 0anacron
Dec 23 02:01:01 mapehr anacron[14943]: Anacron started on 2019-12-23

그런데 확인해 보니 /home/sgaddis/backup백업이 없더라고요.

내 기본/백업 폴더이므로 권한 문제가 아니어야 합니다. 내 계정에는 스크립트를 수동으로 실행할 때와 마찬가지로 백업을 덤프할 수 있는 권한이 있어야 합니다. 또 어디에서 단서를 찾아야 합니까?

나는 갔다https://linux4one.com/how-to-set-up-cron-job-on-centos-7/cronjob을 생성할 때 내가 놓친 것이 있는지 확인하세요.

사이트를 검색했는데 이와 비슷한 문제를 찾을 수 없었습니다. cronjob이 보류 중이 아니거나 실행 중이 아닙니다. 내가 찾은 가장 가까운 것은

  https://stackoverflow.com/questions/44723154/using-cronjob-to-automatically-backup-mysql-files, 

하지만 이전 게시물에서 말했듯이 명령줄에서 스크립트를 실행했는데 제대로 작동했기 때문에 위 게시물에서는 내 질문에 대한 답변이 없습니다.

이 사이트 검색 중

제가 게시한 것과 유사한 문제는 발생하지 않습니다. 비슷한 게시물을 아신다면 제 게시물에 비추천보다는 지적 부탁드립니다.

정확한 노선은 이렇습니다

0 2 * * * root /bin/bash /home/sgaddis/copy-production-db.sh

==업데이트==

오늘 로그 파일의 명령은 다음과 같습니다.

 mapehr CROND[21076]: (sgaddis) CMD (/bin/bash /home/sgaddis/copy-production-db.sh)

이제 내 사용자 계정을 사용하여 크론 작업을 시작합니다.

내 사용자 계정에 cron 작업을 실행할 수 있는 권한이 없을 수도 있습니다.

답변1

안녕하세요, 커뮤니티에 오신 것을 환영합니다!

언뜻 보기에 튜토리얼로 사용하는 페이지에는 를 사용하라고 되어 있지만 crontab -e나중에는 cron 항목에 사용자 이름을 입력해야 한다고 나와 있습니다. 이 crontab도구를 사용할 때 도구를 통해 호출된 crontab은 어쨌든 사용자 컨텍스트에서 실행되므로 cron 항목에 사용자 이름이 필요하지 않습니다. 구성에 사용된 정확한 행을 제공하면 이 문제를 올바르게 수정할 수 있습니다.

그러나 이는 cron 항목의 문제일 수도 있습니다. cron 항목이 있는 경우 사용자 이름을 제거하고 타이밍 구성과 수동으로 사용한 정확한 명령만 다음과 같이 제공하십시오.

0 0 * * * your-command /path/to/script.sh

답변2

cron 작업을 루트로 실행하고 싶다는 의견이 분명합니다.

다음 두 가지 방법으로 이러한 스크립트를 예약할 수 있습니다.

  1. 시스템의 crontab 에 넣으십시오 /etc/crontab. 이 crontab은 질문에 표시된 것과 같은 추가 사용자 필드가 있는 crontab 파일입니다. 일부 Unix 시스템에서는 이 crontab을 자동으로 관리할 수 있으므로 이 방법을 권장하지 않습니다. 대신에...
  2. 루트 사용자의 crontab에 작업을 배치합니다. 권한이 있으면 sudo crontab -e일반 사용자 계정의 명령을 사용하여 루트 사용자의 crontab을 편집할 수 있습니다. sudo이 crontab은 루트 사용자의 "개인용 crontab"이며 루트 권한이 필요한 로컬 예약 작업을 편리하게 실행할 수 있습니다.

cron에서 스크립트를 실행하는 환경은 대화형 셸에서 스크립트를 실행하는 환경과 다를 수 있습니다. 차이점에는 현재 작업 디렉터리가 무엇인지(절대 경로로 또는 절대 경로에서 파일을 복사하는 스크립트 작성), 어떤 환경 변수가 설정되고 어떤 값으로 설정되는지(셸 시작 파일에 설정된 변수는 사용할 수 없습니다. 이는 스크립트에 명시적으로 표시됩니다).

관련 정보