Linux: 2> & 1 создает дополнительный файл журнала 0 размера - другое поведение cron? - PullRequest
0 голосов
/ 18 января 2020

У меня вопрос к поведению 2>&1. Насколько я понимаю, 2>&1 относится к перенаправлению ошибки на стандартный вывод, который должен находиться в том же файле журнала.

Я создаю файл журнала с отметкой времени. Однако, если я планирую это через вкладку cron, я получаю 2 файла журнала, и один из них имеет размер файла 0. Если я запускаю его из командной строки, создается только один файл журнала.

Строка сценария, о которой идет речь:

mysql --defaults-extra-file=/home/ec2-user/performance/.monitor.cnf <<EOD >>$log 2>&1

Вывод, если он из cron - каждый раз, когда есть пара файлов журнала, отметка времени в имени файла немного отличается, и один из двух файлов журнала имеет размер 0

-rw-r--r-- 1 ec2-user ec2-user    0 Jan 18 20:00 300_sec_status-2020-01-18_20:00:00_1579338000_013623289-mysql_innodb_status.log
-rw-r--r-- 1 ec2-user ec2-user 4.4k Jan 18 20:00 300_sec_status-2020-01-18_20:00:02_1579338002_253837419-mysql_innodb_status.log

Вывод, если он выполняется вручную - генерируется только один файл

-rw-rw-r-- 1 ec2-user ec2-user 4.4K Jan 18 20:08 300_sec_status-2020-01-18_20:08:40_1579338520_601067011-mysql_innodb_status.log

cron tab setup:

*/5 * * * * /home/ec2-user/performance/monitor.sh 

Полный текст моего монитора. sh следует

Обратите внимание, что все команды mysql генерируют два файла журнала. Я просто взял один из них, чтобы показать пример.

#!/bin/bash
cd ~ec2-user/performance
INTERVAL=300
PREFIX=${INTERVAL}_sec_status
RUNFILE=RUN

if [ ! -e mysql_variables.log ]; then
mysql  --defaults-extra-file=/home/ec2-user/performance/.monitor.cnf <<EOD >>mysql_variables.log 2>&1
SHOW GLOBAL VARIABLES \G
EOD
fi

if [ ! -e system_info_cpu.log ]; then

lscpu > system_info_cpu.log

fi

if [ ! -e system_info_memory.log ]; then

cat /proc/meminfo | grep MemTotal >system_info_memory.log

fi

if [ -e $RUNFILE ]; then
 file=${PREFIX}
 #sleep=$(date +%s.%N | awk "{print $INTERVAL - (\$1 % $INTERVAL)}")
 #sleep $sleep
 ts="$(date +'%F_%T_%s_%N')"
 loadavg="$(uptime)"
 log=${file}-${ts}-uptime.log
 echo "$ts $loadavg" >> $log
 log=${file}-${ts}-mysql_global_status.log
 mysql --defaults-extra-file=/home/ec2-user/performance/.monitor.cnf <<EOD >>$log 2>&1
 SHOW GLOBAL STATUS\G
EOD
 log=${file}-${ts}-mysql_full_processlist.log
 mysql --defaults-extra-file=/home/ec2-user/performance/.monitor.cnf <<EOD >>$log 2>&1
 SHOW FULL PROCESSLIST\G
EOD
 log=${file}-${ts}-mysql_innodb_status.log
 mysql --defaults-extra-file=/home/ec2-user/performance/.monitor.cnf <<EOD >>$log 2>&1
 SHOW ENGINE INNODB STATUS\G
EOD
 log=${file}-${ts}-iostat.log
 iostat  -c -d -k >>$log
 log=${file}-${ts}-vmstat.log
 vmstat -s  >>$log
 vmstat -f >> $log
 log=${file}-${ts}-ps.log
ps -o pid,user,%mem,command ax | sort -b -k3 -r | head -5 >>$log
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...