命令在终端中有效,但在 crontab 中无效

命令在终端中有效,但在 crontab 中无效

我正在测试设置一些备份。我将 crontab 设置为每分钟运行一次。我有一个安装在 machine2 上的磁盘,我将把备份上传到该磁盘。
我将文件夹的内容压缩/home/user/important到,important.tar.gz并将 tar.gz 文件移动到 machine2 的/mnt/backup2文件夹。

cron 选项卡条目:

* * * * * tar -czvf /home/user/important/important.tar.gz /home/user/important && 
rsync -vzhe ssh /home/user/important/*.tar* machine2:/mnt/backup2

这不会与 crontab 一起运行。

我在终端中运行相同的命令。然后它就起作用了:

/home/user/important/
/home/user/important/a.txt
/home/user/important/test.txt
/home/user/important/this.txt
/home/user/important/is.txt
/home/user/important/important.tar.gz
/home/user/important/important.txt
/home/user/important/test1/
important.tar.gz

sent 9.85K bytes  received 35 bytes  19.76K bytes/sec
total size is 9.75K  speedup is 0.99

文件会在 machine2 上的 /mnt/backup2 文件夹中收到。

有什么建议为什么它不能与 crontab 一起使用吗?我正在运行 Ubuntu。

答案1

很难知道这里真正的问题是什么,但您可以尝试以下几件事:

  • 将这个单行代码放入脚本中,chmod -x然后在 crontab 中使用它

这将使您能够更好地控制正在发生的事情(例如:set -x等)。

  • 启用调试输出以查看导致 crontab 条目无法按预期工作的原因:
#!/bin/bash -x

或者如果你正在使用sh

#!/bin/sh -x

或者直接使用set -x

我猜这可能是权限或 shell globing 的问题,但如果它不能通过脚本解决,你应该这样做:

script.sh &> script.log

因此,当作为 cronjob 运行时,您可以清楚地看到某些内容以及如何失败......

  • 检查是否有条目crontab

这是显而易见的,但由于有些人可能会使用该crontab文件,而不是直接通过以下方式添加它crontab

echo "job entry" | crontab -

或“正常”方式,但需要打开文本编辑器,并且用户手动复制粘贴/键入其作业/crontab 条目...:

crontab

或者如果您更喜欢防止重复输入的方法:

cronadd() {
if crontab -l | grep -wq -- "$@"; then
    :
else
    (crontab -l 2>/dev/null; echo "$@") | crontab -
fi
}

你可以像这样使用它:

cronadd "job entry here"

它应该可以防止添加重复的作业,并且您可以确保它确实已添加......crontab -l但请务必检查。

答案2

感谢所有好的回复。我尝试了一切,直到:

“我猜这可能是权限或 shell globing 的问题,但如果它不能通过脚本解决,你应该这样做:script.sh &> script.log”

问题出在权限上。我用 Sudo 运行 crontab,这造成了一些问题。当我将命令添加到 crontab 时,它以用户身份运行。

相关内容