由于空间有限,我需要在与服务器不同的驱动器上进行 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