设置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 /中的文件发生更改,则可能会导致数据库的映像不一致。