我想备份我的/var/lib/mysql
和/var/www
文件夹并将它们作为 tar.gz 文件保存到我已挂载的网络文件服务器(uslons001)。
这是我的 bash 文件,位于:/bin/backups/mysqlbackup.sh
#!/bin/bash
mkdir /home/lv_admin/uslons001/`date +%d%m%y`
cd /home/lv_admin/uslons001/`date +%d%m%y`
tar -czf mysql.tar.gz /var/lib/mysql
tar -czf www.tar.gz /var/www
当我在 cmd shell 中执行它时,它工作得很好,但是当我设置 cron 作业时,它从不运行,所以我没有正确设置 cron 作业。我的 cron 作业如下所示。
36 10 * * 5 /bin/backups/mysqlbackup.sh
../var/log/cron.log 文件中也没有任何内容,因此没有记录任何错误。(即使在 /etc/syslog.conf 文件中启用了 cron 日志记录之后
答案1
有几点需要指出:
你为什么要在脚本中使用时间字符串
/etc/cron.weekly/
?你只需要将可执行脚本放入其中。你不需要对它们进行 crontab 或其他操作。那只会重复它们的工作。请看/etc/cron.daily/apt
我所说的一个例子。这只是一个简单的脚本。根据 geirha 的评论,该文件不能有扩展名。很奇怪,我知道,所以重命名它:
sudo mv /etc/cron.weekly/mysqlbackup{.sh,}
您需要运行
sudo chmod +x /etc/cron.weekly/mysqlbackup
它才能使其可执行。然后您可以使用该路径运行它来测试它。如果您将其保留在 中
/etc/cron.weekly/
,则脚本将以 root 身份运行。您的所有~/
链接都不会起作用。使用完整路径。我建议您在执行完 之后将其mkdir
放入cd
其中,这将减少后续命令中的长路径。如果您需要生成的文件归您的用户所有,请chown
在备份完成后将脚本分配给您的用户。我认为这些都不需要 root 驱动。您可以将脚本放在主目录中,然后使用标准
crontab -e
添加规则并运行它。它仍然需要可执行,我仍然建议您使用完整路径,但它可以使权限稍微容易一些。
答案2
星期几是数字字段,因此尝试解析“fri”时会失败。将其更改为 5(sunday 为 0)。编辑:我看到 OP 已更新以修复此问题,但仍然存在问题,但它们已在其他答案中得到解决。
cron 格式在网上有详尽的文档,因此我通常在编写新的 cron 作业之前检查一下文档:http://en.wikipedia.org/wiki/Cron
此外,请确保您正在使用crontab -e
(或类似方法)来编辑您的 cron 文件,这将确保它被重新解析。
答案3
我将 bash 文件的位置更改为/usr/local/mysqlbackup.sh
。 之后,我在文件上执行了以下命令:
cd /usr/local/
sudo chown [username] mysqlbackup.sh
sudo chmod -rwx mysqlbackup.sh
sudo chmod go= mysqlbackup.sh
然后我停止使用~$ crontab -e
作为编辑 cron 作业的命令并开始使用sudo nano /etc/crontab
我使用以下命令创建新的作业行:
00 20 * * 5 root /usr/local/mysqlbackup.sh
我开始使用这个文件,因为它可以让我告诉它哪个用户应该执行它。经过这些更改后,cron 作业就可以正常工作了。
答案4
您可以尝试将 cron 行中的错误重定向到文件,例如:
/usr/local/mysqlbackup.sh &>/var/log/mysqlcron.log
这应该捕获 stdout 和 stderr 并报告是否存在任何语法错误等。
注意:如果您正在备份居住数据库,则应使用特定的实用程序进行备份,例如mysqldump
,而不是使用通用 tar 命令。原因是,如果在执行 tar 时 /var/lib/mysql/ 中的文件发生更改,则最终可能会得到不一致的数据库映像。