명령줄에서 백업 스크립트를 수동으로 실행하면 정상적으로 작동합니다. 문제의 백업이 생성되지 않았습니다. 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 작업을 루트로 실행하고 싶다는 의견이 분명합니다.
다음 두 가지 방법으로 이러한 스크립트를 예약할 수 있습니다.
- 시스템의 crontab 에 넣으십시오
/etc/crontab
. 이 crontab은 질문에 표시된 것과 같은 추가 사용자 필드가 있는 crontab 파일입니다. 일부 Unix 시스템에서는 이 crontab을 자동으로 관리할 수 있으므로 이 방법을 권장하지 않습니다. 대신에... - 루트 사용자의 crontab에 작업을 배치합니다. 권한이 있으면
sudo crontab -e
일반 사용자 계정의 명령을 사용하여 루트 사용자의 crontab을 편집할 수 있습니다.sudo
이 crontab은 루트 사용자의 "개인용 crontab"이며 루트 권한이 필요한 로컬 예약 작업을 편리하게 실행할 수 있습니다.
cron에서 스크립트를 실행하는 환경은 대화형 셸에서 스크립트를 실행하는 환경과 다를 수 있습니다. 차이점에는 현재 작업 디렉터리가 무엇인지(절대 경로로 또는 절대 경로에서 파일을 복사하는 스크립트 작성), 어떤 환경 변수가 설정되고 어떤 값으로 설정되는지(셸 시작 파일에 설정된 변수는 사용할 수 없습니다. 이는 스크립트에 명시적으로 표시됩니다).