【发布时间】:2017-03-13 06:39:02
【问题描述】:
我有一个 shell 脚本(存储在 /home/username/public_html/backup_dir/db_backup.sh 中)用于进行数据库备份。
当我通过 putty 在我的 共享主机 中运行 shell 脚本时,转到目录 /home/username/public_html/backup_dir/,然后通过命令 sh db_backup.sh 运行脚本,它会在 @ 中创建 zip 文件987654324@目录(好);但是当我通过 crontab 运行时,相同的脚本会在根目录(即/)(问题) 中创建 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
任何帮助/建议都会帮助分配。
谢谢。
【问题讨论】:
-
非交互式脚本通常没有别名扩展,因此
unalias基本上是空操作。 -
另外,
rm采用任意数量的文件名,因此您可以使用rm -f "$FILE" "$FILE.gz"。-f基本上会关闭“找不到文件”警告作为副作用,因此您不需要错误重定向。 -
@tripleee:其实我不知道shell脚本,我在google中找到的提到的代码所以使用它。那么我应该用
rm -f "$FILE" "$FILE.gz"替换3 行(以unalias开头)吗?我也必须写2> /dev/null吗? -
是的,就是这样;不,你不需要
2> /dev/null,这就是“你不需要错误重定向”的意思。 -
谢谢@tripleee,那我就换了。