LINUX.ORG.RU
решено ФорумAdmin

Mdadm в cron. Нет выхлопа.

 ,


0

1

Если через cron в /etc/cron.d/testjob запустить вот такое:

PATH=/sbin:/bin:/usr/sbin:/usr/bin
0 10 * * * root mdadm -Ds --verbose > /home/vasya/mdadm.txt

То файл окажется пустым. Если запускать как обычно из юзерской или рутовой консоли - выхлоп есть. Если любую другую команду скормить крону - выхлоп так же будет. Но с mdadm пусто. Никаких ошибок cron на mail не шлет.

Собственно wtf?


,кек так «test...», это значение для мейла, ;иль для крона, чето вообще непонятно.

anonymous
()

Проверь что команда отрабатывает. Вангану что проблема с путями.

mos ★★☆☆☆
()
Ответ на: комментарий от mos

Запихнул это в скрипт и скормил его крону. Результат тот же. mdadm.txt пустой.

if which mdadm > /dev/null; then
  if mdadm -Ds --verbose > /home/vasya/mdadm.txt; then
    logger "Vse OK"
    exit 0
  fi
else
  logger "Couldn't find mdadm"
  exit 1
fi

journalctl | grep "Vse OK"
ноя 03 11:14:31 localhost vasya[22858]: Vse OK

Если запускать скрипт вручную - mdadm.txt содержит выхлоп как и положено.

N-N
() автор топика
Ответ на: комментарий от N-N
SHELL=/bin/bash
0 10 * * * root mdadm -Ds --verbose &> /home/vasya/mdadm.txt
entefeed ☆☆☆
()
Ответ на: комментарий от Deleted

И? Честно, даже пролистал этот ман, вдруг я что то упустил. mdadm пишет в stdout, я его перенаправляю в файл. Тут можно допустить ошибку?

N-N
() автор топика
Ответ на: комментарий от anonymous

Если б я еще понял о чем он...

В общем вот так все работает:

PATH=/sbin:/bin:/usr/sbin:/usr/bin
0 13 * * * root echo "$(mdadm -Ds --verbose)" > /home/vasya/mdadm.txt

Но все равно не понятно почему без echo не хочет.

N-N
() автор топика
Ответ на: комментарий от mos

Я уже пробовал stderr перенаправлять. Только смысла нет, mdadm в stdout пишет. Про mail я в топ посте писал что все тихо. Если конечно мы не о разных mail'ах говорим.

N-N
() автор топика
Ответ на: комментарий от Bootmen

Или так:

crontab -e
0 10 * * * /sbin/mdadm -Ds --verbose 2> /home/vasya/mdadm.txt

Bootmen ☆☆☆
()

Ладно, спасибо всем. Фиг с ним с mdadm, через echo работает и ладно.

N-N
() автор топика
Ответ на: комментарий от N-N

Но все равно не понятно почему без echo не хочет.

народная примета: если выхлоп какой-то команды перестает писаться в файл в кроне или в пайпе - значит у этой команды свои собственные представления о буферизации )

vaddd ★☆
()
Ответ на: комментарий от vaddd

А вот за это прям огромное спасибо. Почитал про буферизацию std[i,o]. Я так понял mdadm заполняет stdout буфер, но не сбрасывает его в файл сразу, если stdout ведет не на терминал. Это было бы красивой разгадкой, но тогда я не пойму почему запуская «mdadm -Ds --verbose > /home/vasya/mdadm.txt» ручками у меня все работает, а через крон нет. Чем то значит bash и cron отличаются в плане работы с буферами? Но тут уже моих знаний пока не хватает. Буду благодарен, если скажете куда дальше копнуть.

N-N
() автор топика
Ответ на: комментарий от N-N

Я не знаю куда копнуть (может кто поопытнее в этом вопросе подскажет) и не уверен что есть практический смысл. Imho буферизация - достаточно мутная вещь без единообразия. Зацените например вот это:

https://marc.info/?l=glibc-bug&m=98313957306297&w=4

Похоже мало что изменилось с того времени. Для практических целей достаточно помнить, что именно здесь подводные камни и что для их обхода существуют как опции буферизации отдельных команд, так и примочки stdbuf, unbuffer (из expect-dev пакета если ее нет в дистрибутиве), а также script, socat, echo и прочие костылики )

vaddd ★☆
()
Ответ на: комментарий от vaddd

Еще раз спасибо! Значит остановлюсь на этом.

N-N
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.