如何设置cron备份zip文件的路径

时间:2016-10-31 07:01:52

标签: sh crontab

我有一个shell脚本(存储在/home/username/public_html/backup_dir/db_backup.sh中)用于进行数据库备份。

当我通过putty在我的共享主机中运行shell脚本时,转到目录/home/username/public_html/backup_dir/,然后通过命令sh db_backup.sh运行脚本,它正在创建backup_dir目录中的zip文件(好);但是当我在crontab上运行时,同样的脚本是在root(即/)目录(问题)中创建zip文件。

  

我希望cron在shell脚本所在的/home/username/public_html/backup_dir/中创建zip文件。

我知道我必须将存储路径设置在某处,但我不知道在哪里写它。

Shell脚本(db_backup.sh)

#!/bin/sh
FILE=my_db.sql.`date +"%Y%m%d"`
DATABASE=db_name
USER=db_username
PASS=db_password
unalias rm     2> /dev/null
rm ${FILE}     2> /dev/null
rm ${FILE}.gz  2> /dev/null
mysqldump --opt --user=${USER} --password=${PASS} ${DATABASE} > ${FILE}
gzip $FILE
echo "${FILE}.gz was created:"

crontab命令

0 */6 * * *  sh  /home/username/public_html/backup_dir/db_backup.sh

任何帮助/建议都有助于分配。

感谢。

2 个答案:

答案 0 :(得分:3)

Cron在调用用户的主目录中运行每个作业。显然,你是从root的crontab中运行的。

正确的修复可能是添加脚本的目录路径:

FILE=/home/username/public_html/backup_dir/my_db.sql.$(date +%Y%m%d)

或者如果您明确要使用正在运行的脚本的路径名

FILE=$(dirname "$0")/my_db.sql.$(date +%Y%m%d)

在理想情况下,您的脚本可以在执行任何实际工作之前显式cd到此目录,但我建议您不要这样做,因为

  • 该脚本最终可能无法cd但仍在继续(您当然可以添加set -e以使每个失败致命,但这可能需要在其他地方进行一些代码更改。)
  • 如果目的是始终在同一位置创建文件,那么即使是未经训练的人也应该明白这一点。

答案 1 :(得分:1)

你能试试吗;

#!/bin/sh
FILE=/home/username/public_html/backup_dir/my_db.sql.$(date +"%Y%m%d")
DATABASE=db_name
USER=db_username
PASS=db_password
unalias rm     2> /dev/null
rm ${FILE}     2> /dev/null
rm ${FILE}.gz  2> /dev/null
mysqldump --opt --user=${USER} --password=${PASS} ${DATABASE} > ${FILE}
gzip $FILE
echo "${FILE}.gz was created:"