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

how to set path for cron backup zip file

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

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

I want the cron to creating the zip file in /home/username/public_html/backup_dir/ where the shell script is.

我知道我必须在某个地方设置存储路径,但我不知道在哪里写。

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

任何help/suggestion都将有助于分配。

谢谢。

你能试试这个吗;

#!/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:"

Cron 运行调用用户主目录中的所有作业。显然,你是 运行 这个 root 的 crontab。

正确的解决方法可能是将目录路径添加到脚本中:

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

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

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

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

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