如何设置 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.sh
在 backup_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
以使每次失败都致命,但这可能也需要在其他地方更改一些代码)。
- 如果目的是始终在同一位置创建文件,即使是未经训练的人也应该明白这一点。
我有一个 shell 脚本(存储在 /home/username/public_html/backup_dir/db_backup.sh
中)用于备份数据库。
当我 运行 我的 共享主机 中的 shell 脚本通过 putty 进入目录 /home/username/public_html/backup_dir/
然后 运行 脚本通过命令 sh db_backup.sh
在 backup_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
以使每次失败都致命,但这可能也需要在其他地方更改一些代码)。 - 如果目的是始终在同一位置创建文件,即使是未经训练的人也应该明白这一点。