我想备份我的/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 日志记录后
几点要说明:
为什么要在/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添加规则并运行它。它仍然需要是可执行的,我仍然建议您使用完整路径,但它使权限更容易一些。
我将 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 作业就可以工作了。