Bash脚本失败但部分正在运行

时间:2018-01-15 20:59:16

标签: bash shell

有人可以看到以下内容有什么问题吗?

我一直在寻找并且无法看到问题,但它未能创建SQL转储并且没有创建tar。

变量显然会有详细信息。我检查过这些都是正确的。

#!/bin/bash

SITE=""
PATH=""
SERVER=""
DBUSER=""
DB=""
DBPW=""

DATE=`date '+%d-%m-%y-%H-%M'`

tar -czf ~/backup/${DATE}-${SITE}.tar.gz \
  /var/sites/${PATH}/public_html

mysqldump -f \
  -u ${DBUSER} ${DB} \
  -p${DBPW} \
  -h ${SERVER} > ~/backup/${DATE}-db-${SITE}.sql

find ~/backup -mtime +3 -exec rm -f {} \; 

代码的目的是创建我的服务器文件和数据库的备份。该脚本通过CRON运行。

1 个答案:

答案 0 :(得分:0)

你的脚本中有很多地方会很难处理空格。还有一些其他改进可以帮助您解决问题(因为您没有给我们任何失败的输出......)。

一般

  • 使用"围绕可能最终有空格的命令的参数。
  • set -x放在脚本的顶部,以查看运行时发生的情况。也可以使用bash -x script.sh启动它。
  • 当有未定义的变量时,在顶部使用set -u让脚本死掉。
  • 如果命令失败,请在顶部使用set -e让它死亡。
  • 使用set -eu将它们合并:)
  • 如果您的查找支持,请使用-delete代替-exec rm -f {} \;。如果没有,请确保将其包含在"中,或者更好,请使用-print0xargs并输入-0。根据您拥有的版本,我们的想法是使用NUL作为分隔符,而不是空格(默认shell)。