【问题标题】:Crontab not working [closed]crontab 不工作 [关闭]
【发布时间】:2011-10-06 20:40:06
【问题描述】:

我使用 crontab -e 添加以下内容:

36 * * * * /root/Backup/backup.sh

但它不起作用!

我在 syslog 中找到了这个,但它实际上并没有运行:

Oct  6 15:36:01 ubuntu CRON[7685]: (root) CMD (/root/Backup/backup.sh)

如果我直接运行它,我确定我的脚本可以成功运行。

# 
# define a function to create directory
# 
fnCreateFolder()
{
        if [ ! -d $1 ]; then
                mkdir $1
                echo "New directory, '$1', is created"
        fi
}
############################################################################
#
# Full pathname to binaries to avoid problems with aliases and builtins etc.
#
DATECMD="/bin/date"
RMCMD="/bin/rm"
subdir=`${DATECMD} +%Y-%m-%d`
if [ ! -d "$subdir" ]; then
        fnCreateFolder "$subdir"
fi
############################################################################
        subdir=`${DATECMD} +%Y-%m-%d`
        fnCreateFolder "$subdir"
        datetime=`${DATECMD} +%Y-%m-%d_%Hh%Mm%Ss_%p`
        echo "date-time: $datetime"
        backupname="Backup@$datetime.sql"
        # backup DB
        mysqldump -u'sun' -p'sun2010fyp' smartward > $backupname
        echo "start tar cvzf Backup($datetime).tar.gz $backupname"
        # zip the backup file
        tar cvzf "Backup($datetime).tar.gz" "$backupname"
        echo "finished zip $backupname as Backup($datetime).tar.gz"
        # move tar file to dest folder
        echo "& move it to the destination directory"
        mv "Backup($datetime).tar.gz" "$subdir"
        # & remove the backup file after zipping it
        ${RMCMD} -f "$backupname"
        echo "finally removed $backupname"
#DONE

【问题讨论】:

  • 也许你的脚本依赖于一个环境变量,它存在于你的 shell 中,但不存在于由 cron 启动的 shell 中?
  • 但是当我用 echo 替换它时没有打印 Hello...所以我认为它与我的脚本无关
  • 将输出从 echo 重定向到文件:echo "Hello" > /tmp/hello.txt。这将向您证明 echo 是否成功。
  • 成功!!!Thx 但是它重定向了backup.sh的输出,它只创建了空文件....(我在backup.sh中有echo语句)

标签: linux ubuntu crontab


【解决方案1】:

你缺少两件事:

  1. 脚本应该以#!/bin/sh 开头
  2. 脚本应该是可执行的:chmod u+x /root/Backup/backup.sh

或者,您可以将 crontab 条目更改为以下内容: 36 * * * * /bin/sh /root/Backup/backup.sh

信息: 要么直接从 /bin/sh 调用脚本,要么需要向 shell(cron 的环境)提供足够的信息以使用正确的解释器执行脚本。这由第 1 项处理。此外,由于您尝试直接执行脚本,因此它必须是可执行的。

【讨论】:

    【解决方案2】:

    尝试将 stdout 和 stderr 通过管道传输到文件中。例如。 /..../backup.sh >/tmp/backup-output 2>&1 并检查。还要检查 cron 运行它和你在命令行上运行它之间没有环境问题。将 env 放在文件的开头。

    您还确定 Backup 应该以大写字母开头吗?

    【讨论】:

    • 是的,我确定我将这个“/root/Backup/backup.sh”粘贴到 shell 并且它运行良好
    【解决方案3】:

    谢谢大家 问题已经解决了 我在 shell 脚本中使用绝对路径而不是相对路径。

    【讨论】:

      猜你喜欢
      • 2021-08-09
      • 1970-01-01
      • 1970-01-01
      • 2015-12-28
      • 2011-12-21
      • 2014-08-08
      • 1970-01-01
      • 2015-05-26
      相关资源
      最近更新 更多