나는 이 명령을 사용하여 데이터베이스의 테이블을 백업하기 위한 간단한 쉘 스크립트를 작성했습니다 mysqldump
. 이 명령은 단순히 데이터베이스를 dbName.sql
파일로 덤프합니다. 그러나 dbName.sql
파일이 아직 존재하지 않고 쉘 스크립트를 crontab하면 작동하지 않습니다. 이유는 무엇입니까? crontab 스크립트는 파일 생성 및 쓰기를 허용하지 않습니까?
답변1
Cron 작업은 루트 또는 다른 지정된 사용자로 실행될 수 있습니다. 사용자에게 .sql
파일에 대한 쓰기 권한이 없으면 작업이 실패합니다.
파일이 존재하고 작업을 실행하는 사용자에게 쓰기 권한이 있으면 파일이 기록됩니다.
파일이 존재하지 않고 사용자에게 대상 디렉터리에 파일을 생성할 수 있는 권한이 없으면 작업이 실패합니다.
보통은 이렇게 말할 수 있어요
sudo touch /var/log/foo.log
sudo chown my_username /var/log/foo.log
이제 나는 이렇게 말할 수 있습니다:
echo bar > /var/log/foo.log
그러나 파일이 존재하지 않으면 /var/log/
.
따라서 문제는 작업을 실행하는 사용자에게 mysqldump
출력이 기록되는 파일을 생성할 수 있는 권한이 있는지 여부입니다.
이제 스크립트를 실행하기 위해 cron 작업을 설정하면 다음과 같습니다.
date > /var/log/foo.log
매분마다 다음을 추가할 수 있습니다.
* * * * * my-user-name /path/to/script
에게 /etc/crontab
. /var/log/에 파일을 생성할 권한이 없기 때문에 작업이 실패하면 cron 데몬이 나에게 이메일을 보냅니다.
1분 후에는 파일이 없습니다. 나는 터미널에 가서 다음을 입력했습니다 mail
.
$ mail
>N 1 Cron Daemon Sat Jan 31 05:15 19/731 Cron <user@host> /path/to/script
? type
...
/path/to/script: line 3: /var/log/foo.log: Permission denied
좋아요 내 잘못. 파일을 생성하고 나에게 제공했습니다. 이제 모든 것이 정상입니다.
이것도 확인해 보세요: