我想创建一个 cron 作业来创建我的 Web 目录的 tar。
我已经找到这份工作了
* * * * * tar -zcvfp /disk1/archives/websites/`date +%Y-%m-%d_%I-%M-%S-%p`/`date +%Y-%m-%d_%I:%M:%S:%p`.tar.gz /web
这项工作应该(但没有)在我的 /disk1... 目录中创建一个 tar 文件。所以我对这一点很困惑。
我一直在考虑的另一件事是,是否可以将所有备份 tar 文件转储到一个文件中date +%Y-%m-%d
,并将同一天创建的所有文件放在那里?
因此输出将如下所示
/disk1/archives/websites/2012-02-05/2012-02-05_5:25:04.tar.gz
为了测试目的,我每分钟运行一次这项工作。
我的语法有什么问题吗?
答案1
cron
由于没有环境变量,因此不知道是什么tar
或是什么。请使用完整路径引用二进制文件。date
如果您不知道完整路径,请使用which
获取。
前任:
[bart@dev ~]$ which tar
/bin/tar
[bart@dev ~]$ which date
/bin/date
这将使你的 cron-line 变成这样:
/bin/tar -zcvfp /disk1/archives/websites/`/bin/date +%Y-%m-%d_%I-%M-%S`/`/bin/date +%Y-%m-%d_%I:%M:%S`.tar.gz /web
答案2
将您的 tar 放入 shell 脚本中,例如。/usr/local/bin/backup.sh
然后从 cron 调用该脚本。
* * * * * /usr/local/bin/backup.sh
诀窍在于 cron 不是 shell,因此在 shell 扩展中有效的东西可能在 crontab 中无效。将命令放入脚本中,然后调用该脚本(通过其完整路径),这样更安全,也更容易调试。