2018-11-21 Перенаправление Всего Вывода В Утилитах
Что произошло: Нельзя полностью перенаправлять вывод утилит в лог. Это нарушение strongbash020.
Постановка задачи:
Сделать вменяемый вывод /app/reductor/service restart .
Разбор: При рестарте редуктора(/app/reductor/service restart) выполняется много действий. Идёт запуск нескольких утилит. Вывод от них довольно большой, из-за этого теряется смысл запуска редуктора.
Ошибка: В нескольких утилитах, которые запускаются при инициализации было написано следующее:
#!/bin/bash . /app/reductor/usr/local/Reductor/etc/const exec 1>"$LOGFILE" exec &>"$LOGFILE" .....
Тем самым весь вывод переводится в файл. Это затрудняет работу, потому что при запуске из консоли не увидим вывода и ошибок при запуске.
Исправление Требуется перенаправлять вывод при запуске утилиты. При этом требуется выводить код возврата, если потребуется выяснить причины, то уже будет понятно, что надо смотреть в лог.
/etc/rc.d/init.d/reductor
#!/bin/bash . /cfg/config . /etc/rc.d/init.d/functions . /usr/local/Reductor/etc/const prog="reductor" start(){ local RC echo -n $"Starting $prog: " /usr/local/Reductor/bin/start.sh &>> $LOGFILE RC=$? if [ $RC != 0 ];then echo -e "\nПри остановке редуктора произошли ошибки." echo "Выяснить причины можно в $LOGFILE" fi return $RC } ...
~~OWNERAPPROVE~~
Прочитал правила разработки как не надо делать 2018-11-21 перенаправление всего вывода в утилитах |
Обсуждение
Только это проблема не совсем strongbash020. Здесь нестыковка с unix-style, когда утилиты должны писать логи в stdout/stderr, а не в лог-файлы. Т.к. это приводит к проблемам сопровождения и отладки.
Также, в исправленном варианте полное перенаправление - достаточно опасная операция. Можно замаскировать возможные проблемы, а система должна открыто сообщать о своих проблемах. Здесь мы это допустили, т.к. в случае проблем код возврата будет не нулевой и мы увидим ERROR при запуске. Дополнительно решили добавить обработку ошибочного кода возврата и писать в вывод: «Лог проблемы можно посмотреть в $LOGFILE»
Причем это допустимо только при вызове pl7-скриптов, где мы можем полагаться на код возврата. Иногда, мы этого сделать не можем и параметры вывода могут «утечь» к низлежащим скриптам
по идее все есть в boot.log то что при старте
если нас рестартить апдейтер(по сути крон), то он и должен логировать либо использовать crab_exec с логированием
если мы делаем рестарт руками, то мы и так все видим
Стандартные выводы должны быть unix style
Если сделать такое перенаправление - этого там не будет.
Только reductor start… [OK/FAIL]