Мой опыт (ubuntu) заключается в том, что crontab отправляет только письма stderr (у меня есть выходные данные, направленные в файл журнала, который затем архивируется). Это полезно, но я хотел получить подтверждение того, что скрипт был запущен (даже если нет ошибок для 'stderr'), и некоторые подробности о том, сколько времени это заняло, и я считаю, это хороший способ обнаружить потенциальные проблемы.
Я нашел способ, которым мне легче всего обойти эту проблему, было написать сценарий с некоторыми дублирующими эхо. Обширное регулярное эхо заканчивается в файле журнала. Для важных битов, не связанных с ошибками, которые я хочу в своем электронном письме crontab 'MAILTO', я использовал 'echo', который направлен на stderr с '1> & 2'.
Таким образом, это:
Frmt_s="+>>%y%m%d %H%M%S($HOSTNAME): " # =Format of timestamp: "<YYMMDD HHMMSS>(<machine name>): "
echo `date "$Frmt_s"`"'$0' started." # '$0' is path & filename
echo `date "$Frmt_s"`"'$0' started." 1>&2 # message to stderr
# REPORT:
echo ""
echo "================================================"
echo "================================================" 1>&2 # message to stderr
TotalMins_i=$(( TotalSecs_i / 60 )) # calculate elapsed mins
RemainderSecs_i=$(( TotalSecs_i-(TotalMins_i*60) ))
Title_s="TOTAL run time"
Summary_s=$Summary_s$'\n'$(printf "%-20s%3s:%02d" "$Title_s" $TotalMins_i $RemainderSecs_i)
echo "$Summary_s"
echo "$Summary_s" 1>&2 # message to stderr
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 1>&2 # message to stderr
echo ""
echo `date "$Frmt_s"`"TotalSecs_i: $TotalSecs_i"
echo `date "$Frmt_s"`"'$0' concluded." # '$0' is path & filename
echo `date "$Frmt_s"`"'$0' concluded." 1>&2 # message to stderr
Посылает мне электронное письмо, содержащее это (при отсутствии ошибок строки, начинающиеся с 'ssh:' и 'rsync:' не появляются):
170408 030001(sb03): '/mnt/data1/LoSR/backup_losr_to_elwd.sh' started.
ssh: connect to host 000.000.000.000 port 0000: Connection timed out
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: unexplained error (code 255) at io.c(226) [Receiver=3.1.0]
ssh: connect to host 000.000.000.000 port 0000: Connection timed out
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: unexplained error (code 255) at io.c(226) [Receiver=3.1.0]
================================================
S6 SUMMARY (mins:secs):
'Templates' 2:07
'Clients' 2:08
'Backups' 0:10
'Homes' 0:02
'NetAppsS6' 10:19
'TemplatesNew' 0:01
'S6Www' 0:02
'Aabak' 4:44
'Aaldf' 0:01
'ateam.ldf' 0:01
'Aa50Ini' 0:02
'Aadmin50Ini' 0:01
'GenerateTemplates' 0:01
'BackupScripts' 0:01
TOTAL run time 19:40
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
170408 031941(sb03): '/mnt/data1/LoSR/backup_losr_to_elwd.sh' concluded.
Это не удовлетворяет моему первоначальному желанию "отправить как stdout, так и stderr в лог-файл" (stderr, и только 'echo'ed строки с' 1> & 2 'идут на электронную почту; stdout идет в журнал) , но я считаю, что это лучше, чем мое первоначальное решение, так как электронная почта находит меня, и мне не нужно искать проблемы в файле журнала.