Crontab 计划备份未运行

Crontab 计划备份未运行

由于空间有限,我需要在与服务器不同的驱动器上进行 ZIP 压缩。

下面是我在 crontab 中使用的命令:

00 1 * * * osmc cd /media/SAMSUNG/backups/work/daily && zip -r -FS  Workdaily$(date +%a) /media/Data/Work

它应该每天凌晨 1 点运行,但实际上没有。它似乎被 追上了cd /directory

如果我手动运行它,它可以正常工作。

答案1

这是您的 crontab 命令:

00 1 * * * osmc cd /media/SAMSUNG/backups/work/daily && zip -r -FS  Workdaily$(date +%a) /media/Data/Work

您陈述:

如果我手动运行它,它可以正常工作。

那么,这一切意味着当您登录时该命令可以完美运行,但登录crontab正确时则不行吗?

好吧,看看你的命令。特别是zip。当你登录到你的系统时,系统知道搜索你设置的路径——这些路径被加载仅有的如果您登录——则为二进制文件。但是当您以没有二进制文件等搜索路径zip运行时;您需要crontab明确地设置二进制文件的路径zip

因此我建议运行一下which来查看zip二进制文件的实际位置,如下所示:

which zip

返回的值应该是这样的;这是它在我本地的 Ubuntu 12.04 设置上的安装位置:

/usr/bin/zip

date像这样进行相同操作:

which date

返回的输出应该是这样的:

/bin/date

现在知道了这一点,请调整您的crontab条目以明确调用完整路径,如下zip所示:

00 1 * * * osmc cd /media/SAMSUNG/backups/work/daily && /usr/bin/zip -r -FS  Workdaily$(/bin/date +%a) /media/Data/Work

一切都应该正常运行。

话虽如此,将这样的复合命令放入 crontab(尤其是备份脚本)是一种习惯。脚本可能有效,但最终维护起来会变得有点麻烦和混乱。

因此,我建议创建一个包含这些命令的简单 Bash 脚本,然后运行crontab该 Bash 脚本。该 Bash 脚本的内容可以简单到如下:

#!/bin/bash
cd /media/SAMSUNG/backups/work/daily && /usr/bin/zip -r -FS  Workdaily$(/bin/date +%a) /media/Data/Work

注意我删除了,osmc因为那不是一个命令;我相信它是对你的用户的引用?假设 Bash 脚本名为my_backup.sh,并且位于名为 的用户目录中/home/kris。那么新crontab条目将是:

00 1 * * * /home/kris/my_backup.sh

在我看来,这样的设置更容易维护。并确保脚本可执行,chmod如下所示:

chmod 744 /home/kris/my_backup.sh

相关内容