Bash 日期问题

Bash 日期问题

我正在运行这个 bash 脚本来备份数据库,但是我总是在 date 和 tar 命令上收到错误。

#!/bin/bash
backup_filename=/var/www/vhosts/foo.com/private/backup_foo_db.sql
filename="db_daily_"`date +%Y%m%d`".tar.gz"
compressed_filename=/var/www/vhosts/foo.com/private/backup_foo_db_$filename.tar.gz
mysqldump --add-drop-table -h localhost -ufoo -pbar foobar > $backup_filename
tar cvfz $compressed_filename $backup_filename
rm $backup_filename

./mysqlbackup.sh: line 3: date: command not found

这可能是权限问题吗?我没有以 root 身份运行该文件。

答案1

您是否将其作为 cron 作业或类似程序运行?如果是这样,问题可能是它以与正常情况不同的 PATH 运行,并且不包含datetar所在的目录。有两种简单的方法可以解决此问题:要么使用命令的完整路径(例如/usr/bin/date,如@glenn jackman 所建议的),要么在脚本顶部明确设置 PATH(例如PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin或类似内容)。

顺便说一句,您最终也会得到一个奇怪的备份文件名。首先,您将其设置filename为“db_daily_20110926.tar.gz”之类的名称,然后将其设置compressed_filename为“/var/www/vhosts/foo.com/private/backup_foo_db_db_daily_20110926.tar.gz.tar.gz”之类的名称。这可能不是您想要的。

答案2

简化并将此行拆分为多行,从:

filename="db_daily_"`date +%Y%m%d`".tar.gz"

所以它变成了这样:

myDate=`date +"%Y%m%d"`
filename="db_daily_"$myDate".tar.gz"

相关内容