Shell-Script

使用 cron 執行的 Shell 腳本生成的文件大小與手動執行的不同

  • August 4, 2015

我有一個執行 MySQL 數據庫的 RHEL 伺服器。我有一個執行mysqldump創建備份文件的 Bash 腳本。直接在 Bash 中執行腳本時創建的備份文件大小為 754259 字節。如果通過 cron 執行相同的腳本,它的大小只有 20 個字節。

據我所知,cron 執行的使用者上下文與我在登錄時手動執行腳本時使用的使用者上下文相同。然而,考慮到大小差異,這似乎不是真的。

為什麼執行相同的腳本時文件大小不同?

shell腳本內容:

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

要編輯 cron:

sudo crontab -e

cron 文件內容:

12 21 * * * /var/custom/maint_plan

這將在每天晚上 9:13 執行腳本。

mysqldump命令不返回任何內容,它通過管道傳輸gzip並以一個空的 gzip 文件結尾。看:

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

這將生成一個大小為 20 字節的文件。所以問題是mysqldump命令。由於它是 root 的 crontab,因此腳本以 root 權限執行。sudo沒有必要。使用它而不使用sudo. 只是:

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

通過 cron 執行的腳本失敗。20 字節是空 MySQL 轉儲的大小。

引用自:https://unix.stackexchange.com/questions/220139