设置 CRON 每周备份

sad*_*ave 7 bash backup 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
Run Code Online (Sandbox Code Playgroud)

当我在 cmd shell 中执行它时它工作得非常好,但是当我设置 cron 作业时它永远不会运行,所以我没有正确设置 cron 作业。我的 cron 工作看起来像这样。

   36 10 * * 5 /bin/backups/mysqlbackup.sh
Run Code Online (Sandbox Code Playgroud)

../var/log/cron.log 文件中也没有任何内容,因此不会记录任何错误。(即使在 /etc/syslog.conf 文件中启用 cron 日志记录后

Oli*_*Oli 7

几点要说明:

  • 为什么要在/etc/cron.weekly/脚本中使用时间字符串?你只应该把可执行脚本放在那里。您不需要 crontab 它们或其他任何东西。那只会重复他们的工作。看看/etc/cron.daily/apt我在说什么的一个例子。这只是一个简单的脚本。

  • 根据 geirha 的评论,该文件不能有扩展名。奇怪,我知道,所以重命名它:

    sudo mv /etc/cron.weekly/mysqlbackup{.sh,}
    
    Run Code Online (Sandbox Code Playgroud)
  • 您需要运行sudo chmod +x /etc/cron.weekly/mysqlbackup以使其可执行。然后,您可以通过使用该路径运行它来测试它。

  • 如果您将其留在 中/etc/cron.weekly/,脚本将以 root 身份运行。您的任何~/链接都不起作用。使用完整路径。我建议你做了之后mkdir,你cd进入它,这将减少后续命令巨大的路径。如果您需要生成的文件归您的用户所有,请chown在完成备份后将它们交给您的用户。

    我没有看到任何原因是根驱动的。您可以将脚本放入主目录中,然后使用标准crontab -e添加规则并运行它。它仍然需要是可执行的,我仍然建议您使用完整路径,但它使权限更容易一些。

  • `sudo chmod +x /etc/cron.weekly/mysqlbackup.sh` 仍然不会让脚本每周运行一次。Cron 忽略那些目录中带有扩展名的文件。一般来说,脚本不应该有扩展名。 (3认同)
  • @LimitedAtonement,如果您查看默认的`/etc/crontab`,如果“未安装” anacron,则使用`run-parts` 来运行`/etc/cron.{daily,weekly,monthly}` 中的作业。[run-parts(8)](http://manpages.ubuntu.com/manpages/precise/en/man8/run-parts.8.html) 依次解释了文件名中允许使用的字符。我相信其背后的主要原因是能够通过简单地将“jobname”重命名为“jobname.disabled”或类似名称来轻松禁用作业。 (2认同)

sad*_*ave 1

我将 bash 文件的位置更改为/usr/local/mysqlbackup.sh. 执行此操作后,我对该文件执行了以下命令:

cd /usr/local/
sudo chown [username] mysqlbackup.sh
sudo chmod -rwx mysqlbackup.sh
sudo chmod go= mysqlbackup.sh
Run Code Online (Sandbox Code Playgroud)

然后我停止使用~$ crontab -e作为编辑 cron 作业的命令,并开始使用sudo nano /etc/crontab我创建的新作业行,其中包含以下内容:

00 20    * * 5  root  /usr/local/mysqlbackup.sh
Run Code Online (Sandbox Code Playgroud)

我开始使用这个文件,因为它使我能够告诉它哪个用户应该执行它。在这些更改之后,cron 作业就可以工作了。