设置 CRON 每周备份

设置 CRON 每周备份

我想备份我的/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/ 中的文件发生更改,则最终可能会得到不一致的数据库映像。

相关内容