请原谅我的无知。我搜索过,但也许我不确定要搜索什么才能自己回答我的问题,所以我转向这个论坛寻求一些指导。
我已启动 Ubuntu 服务器 12.04.3。此服务器主要运行 MySQL。我正尝试设置一项将执行每日转储的作业。
我以自己的用户身份登录,我创建了一个名为/主页/xyz/MySQL_Dumps/RunMySQLDump
-rwxrwxr-x 1 0 1000 1012 Jan 15 15:26 RunMySQLDump
crontab –l显示:
12 * * * * /home/xyz/MySQL_Dumps/RunMySQLDump
RunMySQLDump 的内容:
MyTimeNow=$(date +"%Y%m%e_%H%M")
mysqldump --host=localhost --user=<user> --password=<password>--max_allowed_packet=1G --skip-opt --port=3306 --default-character-set=utf8 --single-transaction=TRUE --dump-date=TRUE --comments --flush-privileges --force --all-databases --result-file=/home/xyz/MySQL_Dumps/$MyTimeNow-X.dump
mysqldump --host=localhost --user=<user> --password=<password> --max_allowed_packet=1G --skip-opt --port=3306 --default-character-set=utf8 --single-transaction=TRUE --dump-date=TRUE --comments --flush-privileges --force --all-databases --result-file=/home/xyz/MySQL_Dumps/$MyTimeNow-Y.dump
mysqldump --host=localhost --user=<user> --password=<password> --max_allowed_packet=1G --skip-opt --port=3306 --default-character-set=utf8 --single-transaction=TRUE --dump-date=TRUE --comments --flush-privileges --force --all-databases --result-file=/home/xyz/MySQL_Dumps/$MyTimeNow-Z.dump
tar -cvf $MyTimeNow-all.tar $MyTimeNow*.dump
gzip *.tar
rm $MyTimeNow*.dump
这就是我遇到的问题。当我以自己的用户“xyz”身份登录服务器并手动运行命令时./运行MySQLDump,一切正常:
/主页/xyz/MySQL_Dumps
-rw-rw-r-- 1 1000 1000 1042848433 Jan 15 14:03 20140114_0310-all.tar.gz
-rw-rw-r-- 1 1000 1000 1065212917 Jan 15 15:18 20140115_1512-all.tar.gz
-rw-rw-r-- 1 1000 1000 1065718672 Jan 15 16:28 20140115_1622-all.tar.gz
-rw-rw-r-- 1 1000 1000 1077965846 Jan 16 11:42 20140116_1136-all.tar.gz
然而,当我让 cron 运行该作业时,我得到的结果如下: /主页/xyz(注意:不在 /home/xyz/MySQL_Dumps 中并且没有数据!)
-rw-rw-r-- 1 xyz xyz 67 Jan 16 16:12 20140116_1612-all.tar.gz
有人能给我指明正确的方向吗?
非常感谢!
答案1
./RunMySQLDump
当您使用脚本的工作目录运行时/home/xyz/MySQL_Dumps/
,这就是它起作用的原因。
当cron
启动脚本时,它的工作目录是/home/xyz/
(您的主目录),就像在用户 crontab 中一样。
脚本的第一行使用绝对路径,最后一行使用相对路径。这就是它失败的原因。
在开始使用相对路径之前或最好在脚本开头更改脚本中的工作目录:
cd /home/xyz/MySQL_Dumps/
或者在脚本的任何地方使用绝对路径。