Shell脚本和CRON问题

时间:2011-02-21 09:57:44

标签: bash shell ubuntu cron

我为本地开发服务器编写了一个备份脚本(运行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

我可能还没有提供足够的信息来完全回答这篇文章,但我可以根据需要发布更多信息,但我真的不知道下一步该在哪里看。

3 个答案:

答案 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/user1crond可以从不同的目录执行您的脚本,并强制它使用相同的目录而不管它是如何执行的,这可能是一个良好的开端。

另一个可能有用的调试步骤是添加id > /tmp/id.$$或类似的东西,这样您就可以确切地看到用于运行脚本的用户帐户和组。

答案 2 :(得分:1)

在crontab中,只需将2> $ 1更改为2>& 1。我自己刚做了一个。谢谢Dennis Williamson。