我为本地开发服务器编写了一个备份脚本(运行Ubuntu服务器版本9.10),这只是一个简单的tar和脚本脚本。 gzip本地根并将其粘贴在备份文件夹中。 我跑的时候工作正常:
$ bash backups.sh
但是当我通过crontab运行它时它不会工作。
59 23 * * * bash /home/vnc/backups/backup.sh >> /home/vnc/backups/backup.log 2> $1
我收到错误消息
/bin/sh: cannot create : nonexistent
该脚本在其运行的文件夹(/ home / user1)中生成tar.gz,但后来尝试将其复制到已安装的共享(/ home / backups,实际上是192.168.0.6/backups)网络驱动器,通过使用fstab。 已安装的共享具有权限777,但所有者和组与运行该脚本的用户和组不同。 我正在使用bash来运行脚本而不是sh以解决我过去曾遇到过的“错误替换”错误的另一个问题
文件的前两行是
! /bin/bash
cd /home/vnc/backups
我可能还没有提供足够的信息来完全回答这篇文章,但我可以根据需要发布更多信息,但我真的不知道下一步该在哪里看。
答案 0 :(得分:5)
线索在错误消息中:
/bin/sh: cannot create : nonexistent
请注意它是“sh”。 Bourne shell不支持某些特定于Bash的功能。如果您正在使用Bash功能,那么您需要告诉Bash运行脚本。
制作文件的第一行:
#!/bin/bash
或在您的crontab条目中执行此操作:
* * * * * /bin/bash scriptname
如果没有看到你的crontab条目和你的脚本,就很难具体了。
答案 1 :(得分:1)
您在backups.sh
中应该做的第一件事就是插入cd /home/user1
。 crond
可以从不同的目录执行您的脚本,并强制它使用相同的目录而不管它是如何执行的,这可能是一个良好的开端。
另一个可能有用的调试步骤是添加id > /tmp/id.$$
或类似的东西,这样您就可以确切地看到用于运行脚本的用户帐户和组。
答案 2 :(得分:1)
在crontab中,只需将2> $ 1更改为2>& 1。我自己刚做了一个。谢谢Dennis Williamson。