У меня проблема с моим сценарием оболочки. Я в основном пытаюсь создать новый файл журнала из (2) файлов с помощью команд Unix (zcat, cat
)
FileA = gzipped logfile (.gz)
FileB = non-gzipped log file (.log)
FileC = new file from FileA:FileB
Моя проблема с FileC
.
Например:
FileA имеет данные метки времени от Aug19-Sept3
FileB имеет данные метки времени от Sept4-Sept17
FileC содержит содержимое обоих файлов = Aug19-Sept3:Sept4-Sept17
Проблема:
Если я вручную запускаю команды на сервере, файл выглядит нормально, так как я ожидаю, что FileC будет иметь метки времени из Aug19-Sept17
Но , если это делается программно с помощью сценария оболочки, локальная копия выглядит следующим образом, когда я копирую ее обратно удаленно:
FileC = Aug19-Sept17:Aug19-Sept2
Итак, мой вопрос: почему это происходит программно?
Есть ли лучший способ объединить / сшить эти 2 журнала вместе, чтобы создать еще один?
Вот мой сценарий оболочки:
#!/bin/bash
if [ $# != 1 ]; then
echo "Usage: getlogs.sh <remote-host>" 2>&1
exit 1
fi
#Declare variables
STAMP=`date '+%Y%m%d-%H:%M'`
REMOTE_MYCNF=/var/log/mysoft/mysoft.log
REMOTE_GZ=/var/log/mysoft/mysoft.log.1.gz
REMOTE_DIR=/var/log/mysoft/
BACKUP_DIR=/home/dev/logs/
NEWLOG="foo-temp.log"
#Copy file over
echo "START..." 2>&1
test -f $BACKUP_DIR$1.mysoft.log
if [ $? = 0 ]; then
echo "Local log file $BACKUP_DIR$1.mysoft.log exists, clean up for new copy..." 2>&1
/bin/rm $BACKUP_DIR$1.mysoft.log
else
echo "File does not exist, getting a new copy..." 2>&1
fi
echo "Checking remotely in $1 for logfile $REMOTE_MYCNF $STAMP" 2>&1
if [ ! -f $REMOTE_MYCNF ]; then
echo "File exists remotely, creating new logfile and copy here...." 2>&1
ssh $1 "zcat $REMOTE_GZ >> $REMOTE_DIR$NEWLOG"
ssh $1 "cat $REMOTE_MYCNF >> $REMOTE_DIR$NEWLOG"
/usr/bin/scp $1:$REMOTE_DIR$NEWLOG $BACKUP_DIR$1.mysoft.log
echo "end remote copy" 2>&1
echo "Cleaning up remote files" 2>&1
ssh $1 "rm $REMOTE_DIR$NEWLOG"
exit 0
else
echo "Unable to get file" 2>&1
exit 0
fi