如何设置 cron 任务并在任务中使用正确的语法

如何设置 cron 任务并在任务中使用正确的语法

我想创建一个 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 中无效。将命令放入脚本中,然后调用该脚本(通过其完整路径),这样更安全,也更容易调试。

相关内容