如何设置一个cron作业,并在我的作业中使用正确的语法

我想做一个cron作业,创build我的web目录的焦油。

我有这个工作

* * * * * tar -zcvfp /disk1/archives/websites/`date +%Y-%m-%d_%I-%M-%S-%p`/`date +%Y-%m-%d_%I:%M:%S:%p`.tar.gz /web 

这个工作应该(但不)创build一个tar文件到我的/ disk1目录。 所以我难住了那一个。

还有一件事是我想到的,是否有可能把所有的备份tar文件都转储到date +%Y-%m-%d并且将同一天创build的所有文件放在那里?

所以输出看起来像

/disk1/archives/websites/2012-02-05/2012-02-05_5:25:04.tar.gz

为了testing目的,我每分钟都会做这个工作。

我的语法有什么问题吗?

cron不知道tardate是什么,因为它没有环境variables。 用完整的path来回应二进制文件。

如果你不知道完整的path,可以用which来获取它。

例如:

 [bart@dev ~]$ which tar /bin/tar [bart@dev ~]$ which date /bin/date 

这将使你的cron线这个:

 /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 

把你的tar放在一个shell脚本中,比如/usr/local/bin/backup.sh 。 然后从cron调用该脚本。

 * * * * * /usr/local/bin/backup.sh 

诀窍是,cron不是一个shell,所以在shell扩展中工作的东西可能无法在crontabs中工作。 debugging将命令放入脚本中,然后调用该脚本(通过完整path)会更安全,更容易。