Cron 正在运行但未提供输出数据

Cron 正在运行但未提供输出数据

我正在尝试通过 crontab 停止和启动我的 Amazon EC2 实例。EC2 Api 工具已成功安装。手动操作有效。

cron(我用命令输入的crontab -e):

10 * * * * ubuntu /usr/bin/ec2-stop-instances [instanceid] > /tmp/ec2.log

文件/tmp/ec2.log已创建。当我使用该命令时grep CRON /var/log/syslog,我看到 cron 已实际运行。但我在文件中没有得到任何输出/tmp/ec2.log。我已设置了所需的所有 Amazon 变量。

即使我故意创建了一个错误的 cron,如下所示:

10 * * * * ubuntu /usr/bin/ec2-stop-instancwweqes [instanceid] > /tmp/ec2.log

文件中没有输出。不应该有错误吗?我还尝试不定义用户:

10 * * * * /usr/bin/ec2-stop-instances [instanceid] > /tmp/ec2.log

并直接命令:

10 * * * * ubuntu ec2-stop-instances [instanceid] > /tmp/ec2.log

有人能帮帮我吗?如果我能以某种方式调试,我就能找到解决方案。

答案1

'>' 运算符仅将写入标准输出的所有内容重定向(检查:https://stackoverflow.com/questions/876239/bash-redirect-and-append-both-stdout-and-stderr)。Stderr 是一个单独的输出流,这就是为什么您的错误 cron 不起作用的原因,因为它会写入 stderr(典型的 shell 同时显示 stdout 和 stderr)。要将 stderr 和 stdout 都附加到文件,请使用 '&>' 而不是 '>'。

现在来看看你的问题:似乎 Ec2-stop-instances 也没有写入 stdout。使用

10 * * * * ubuntu /usr/bin/ec2-stop-instances [instanceid] &> /tmp/ec2.log

应该可以解决你的问题。

另一种写方式是,通过将 2>&1 附加到构造中来将 stderr(通常是流 1)重定向到 stdout(通常是流 1)的位置:

10 * * * * ubuntu /usr/bin/ec2-stop-instances [instanceid] > /tmp/ec2.log 2&>1

相关内容