设置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日志记录后也是如此

几点要点:

  • 为什么你在/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之后进入它,这将减少后续命令中的巨大路径。 如果您需要由用户拥有生成的文件,请在完成备份chown脚本添加到用户手中。

    我认为没有任何理由可以通过root驱动。 您可以在主目录中删除脚本,然后使用标准的crontab -e添加规则并运行它。 它仍然需要可执行,我仍然建议您使用完整路径,但它使权限稍微容易一些。

一周中的某一天是一个数字字段,因此在尝试解析’fri’时失败了。 将其更改为5(星期日为0)。 编辑:我看到OP已更新以解决此问题,但仍有问题,但在其他答案中已解决。

cron格式在网上有很好的文档,因此我通常在编写新的cron作业之前检查文档: http : //en.wikipedia.org/wiki/Cron

此外,请确保您使用crontab -e (或类似的)来编辑您的cron文件,这将确保它被重新解析。

我将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作业正常工作。

您可以尝试将错误从cron行重定向到文件,例如:

/usr/local/mysqlbackup.sh &>/var/log/mysqlcron.log

这应该捕获stdout和stderr并报告是否存在语法错误等。

注意:如果要备份实时数据库,则应使用特定的备份实用程序(如mysqldump ,而不是使用通用tar命令。 原因是如果在执行tar时/ var / lib / mysql /中的文件发生更改,则可能会导致数据库的映像不一致。