cron을 사용하여 실행된 쉘 스크립트는 수동 실행과 다른 크기의 파일을 생성합니다.

cron을 사용하여 실행된 쉘 스크립트는 수동 실행과 다른 크기의 파일을 생성합니다.

MySQL 데이터베이스를 실행하는 RHEL 서버가 있습니다. mysqldump백업 파일을 생성하기 위해 실행되는 Bash 스크립트가 있습니다 . Bash에서 직접 스크립트를 실행할 때 생성되는 백업 파일의 크기는 754259바이트입니다. cron을 통해 동일한 스크립트를 실행하면 크기는 20바이트에 불과합니다.

내가 아는 한 cron은 스크립트를 수동으로 실행하기 위해 로그인할 때 사용하는 것과 동일한 사용자 컨텍스트에서 실행됩니다. 하지만 크기 차이를 고려하면 꼭 그렇지는 않은 것 같습니다.

동일한 스크립트를 실행할 때 파일 크기가 다른 이유는 무엇입니까?

쉘 스크립트 내용:

backup_path=/var/custom/db_backups
configFile=/var/custom/auth.cnf
db_name=[db_name]
date=$(date +"%d-%b-%Y")

sudo /opt/rh/mysql55/root/usr/bin/mysqldump --defaults-extra-file=$configFile $db_name | gzip -9  > $backup_path/$db_name-$date.sql.gz

크론 편집:

sudo crontab -e

크론 파일 내용:

12 21 * * * /var/custom/maint_plan

그러면 매일 밤 오후 9시 13분에 스크립트가 실행됩니다.

답변1

mysqldump명령은 아무것도 반환하지 않으며 파이프로 연결되어 gzip빈 gzip 파일로 끝납니다. 바라보다:

$ echo -n "" | gzip -9  > test.gz
$ stat -c %s test.gz
20

그러면 20바이트 크기의 파일이 생성됩니다. 그래서 문제는 mysqldump명령에 있습니다. 루트의 crontab이므로 스크립트는 루트 권한으로 실행됩니다. sudo필요 없음. 그것을 사용하려면 필요하지 않습니다 sudo.

/opt/rh/mysql55/root/usr/bin/mysqldump --defaults-extra-file=$configFile $db_name | gzip -9  > $backup_path/$db_name-$date.sql.gz

답변2

cron을 통해 실행되는 스크립트는 실패합니다. 20바이트는 빈 MySQL 덤프의 크기입니다.

답변3

cron은 스크립트 실행을 위한 환경이 매우 제한되어 있습니다. 필요한 모든 프로그램을 찾지 못할 수도 있습니다. 좋은 덤프를 얻은 셸의 환경 변수를 캡처하여 cron 스크립트로 전송합니다.

관련 정보