Перенаправление stderr не работает, когда приложения выполняются как часть cronjob - PullRequest
0 голосов
/ 26 августа 2018

при вызове

/home/username/temp/build/appname 2> /home/username/temp/log/stderr 1> /home/username/temp/log/stdout

оба stderr перенаправляются в / home / username / temp / log / stderr, а stdout перенаправляется в /home/username/temp/log/stdout.

Однако при добавлении cronjob

5 * * * * username /home/username/temp/build/appname 2> /home/username/temp/log/stderr 1> /home/username/temp/log/stdout

Приложение работает как положено, stdout перенаправляется в / home / username / temp / log / stdout, , но stderr пусто .

Есть идеи?

РЕДАКТИРОВАТЬ: Верх / etc / crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

Эта проблема, кажется, является эксклюзивной для моего(командная строка qt) application. Следующий cronjob работает с правильным перенаправлением stderr:

* * * * * username ls /doesnotexist 2> /home/username/temp/log/ls_stderr

1 Ответ

0 голосов
/ 26 августа 2018

В зависимости от вашего дистрибутива может быть, что crontab использует другую оболочку, чем вы ожидаете.На ум приходят два решения:

  1. Установите оболочку в crontab

    Добавьте SHELL=/bin/bash (или любую предпочитаемую вами оболочку) в верхнюю часть вашего crontab

  2. Использовать синтаксис перенаправления, который использует crontab

    Вы можете найти оболочку, добавив

    * * * * * echo $SHELL > $HOME/cronshell
    

    в свой crontab.Скорее всего, это будет / bin / sh, который опять же в зависимости от вашего дистрибутива может быть связан с другой оболочкой. Здесь вы можете найти отличную сводку различных синтаксисов перенаправления оболочки.

...