Cron работает, но не предоставляет выходные данные

Я пытаюсь заставить мои экземпляры Amazon EC2 останавливаться и запускаться с помощью crontab. Инструменты 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

Может кто-нибудь, пожалуйста, помогите мне. Если я смогу как-то отладить, я смогу найти решение.

0
задан 17.04.2020, 17:07

1 ответ

Оператор '>' - перенаправляет только все, что записано на ваш стандартный вывод (проверьте: https://stackoverflow.com/questions/876239/bash-redirect-and-append-both-stdout-and- STDERR ). Stderr - это отдельный выходной поток, поэтому ваш неправильный cron не работает, так как он пишет в stderr (типичная оболочка показывает как stdout, так и stderr). Чтобы добавить как stderr, так и stdout в файл, используйте '& amp;>' вместо '>'.

Теперь к вашей проблеме: кажется, что Ec2-stop-instances не пишет в стандартный вывод. Использование

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

должно исправить вашу проблему.

Другой способ записи - перенаправить stderr (обычно поток 1) туда, куда идет stdout (обычно поток 1), добавив 2> & 1 к вашей конструкции:

10 * * * * ubuntu /usr/bin/ec2-stop-instances [instanceid] > /tmp/ec2.log 2&>1
0
ответ дан 17.04.2020, 17:08
  • 1
    Первый способ перенаправить и stderr и stdin перестанет работать, потому что &> bashism. Оболочка для заданий крона (не изменено с помощью SHELL переменная в /etc/crontab) /bin/sh. В системе Ubuntu это будет POSIXly, корректным dash оболочка. – afikri 17.04.2020, 17:09

Теги

Похожие вопросы