我正在测试设置一些备份。我将 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 时,它以用户身份运行。