我有一个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
任何帮助/建议都有助于分配。
感谢。
答案 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:"