【问题标题】:Trouble running tar from crontab无法从 crontab 运行 tar
【发布时间】:2015-07-09 19:34:20
【问题描述】:

当我想手动压缩文件夹时,我使用命令:

tar -zcvf $dirBackup-$actualTime.tgz $dirBackup; 

而且效果很好。另外,当我解压缩存档时,结果是正确的。

但是当我从 crontab 运行相同的命令时出现问题:生成的 tgz 似乎只包含一个空文件。

crontab -l>> /home/user/Desktop/test/temp;
echo "$min $hour * * * tar -zcvf $dirBackup-$actualTime.tgz $dirBackup">> temp;
crontab temp;

我需要更改 crontab 表达式中的任何内容吗?我必须是 root 才能运行 crontab 吗?文件 temp 已正确创建,并且位于正确的文件夹中。

非常感谢您的关注!

【问题讨论】:

  • 您能否在您的 crontab 中展示这项工作的外观(而不是您尝试在那里编写它的方式)?出现问题是因为您使用了环境变量,并且有趣的是下面的内容(例如相对路径,完整路径?)
  • 发布crontab -l的输出。

标签: bash cron debian backup crontab


【解决方案1】:

您需要在 echo 命令中设置变量的值,以便将条目添加到 cron 作业中。示例脚本应如下所示:

#!/bin/bash

min=30
hour=17
dirBackup=/home/user/Desktop
actualTime=30-04-2015

crontab -l >> /home/user/temp
echo "$min $hour * * * tar -zcvf $dirBackup-$actualTime.tgz $dirBackup 2>&1 | tee /tmp/cron.log">> /home/user/temp;
crontab /home/user/temp;

生成的 tar 文件将在用户的 HOME 目录中创建(运行 cron 的用户)。

为避免遇到用户权限问题,您可以使用以下命令指定运行 cron 的用户:

crontab -u <username> <cron_file>

【讨论】:

  • 实际上我从阅读控制台设置分钟和小时的值。但我不知道为什么它不起作用。他们在确定的时间进行备份,但它是一个空文件。我读到有时需要在 crontab 文件中设置一个新行。这是真的吗?
  • @Reaper dirBackup 的值是从哪里传递过来的? dirBackup 的值是否正常?
  • @Reaper 您收到任何错误吗?尝试运行将错误重定向到文件的 cron。查看我的编辑。
  • 没有错误。它向我展示了可编程的 crontab 任务。全对了。 .tgz 文件已生成,但它是空的。这让我很头疼!
  • 空的究竟是什么意思?源目录是空的吗?另外,请使用绝对路径来重定向输出的临时文件。
【解决方案2】:

根据您的系统,crontab 作业可能会或可能不会在您的$HOME 目录中运行(实际上它们通常在//var/cron 中运行)。在tar 命令之前添加cd $HOME;

【讨论】:

  • 我这样做了,但它不起作用。也许这可能是特权的原因?我的意思是,必须是 root 才能执行 crontab?
  • 您可以再次运行crontab -l 进行检查。
  • @Reaper 要回答您的问题,首先,执行 cronjob 不必是 root 用户。您尝试访问的目录应该可以从该用户的上下文中访问。如果不是,那么权限问题就会出现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-27
  • 1970-01-01
  • 2020-05-24
  • 2016-10-20
  • 2016-03-06
  • 2013-02-23
  • 2013-10-22
相关资源
最近更新 更多