Unix Comm в скрипте не работает должным образом

У меня есть нижеприведенный скрипт, который планируется ставить на cron ежечасно, чтобы увидеть, сколько новых попыток сбоев делается в какое время.

[root@server123 abc123]# cat script
#!/bin/bash
# Checks if the log file exists
if [ ! -e Internal_LogFile ] ; then
grep "Authentication <failed> for <Active Directory> user: <xyz123>" secure.log > Internal_LogFile
else
#> Internal_LogFile
comm -23 <(grep "Authentication <failed> for <Active Directory> user: <xyz123>" secure.log | sort) <(sort Internal_LogFile) > Internal_LogFile
fi
[root@server123 abc123]#

Мы ищем файл secure.log, в котором мы могли видеть записи журнала ошибок. Я собираюсь записать их для определенного идентификатора, а затем сохранить эти записи в новом файле с именем Internal_LogFile. И будет планировать пересылать этот Internal_LogFile по почте.

Это то, что я пробовал до сих пор, если вы видите запись о сбое secure.log - 1.

[root@server123 abc123]# cat secure.log
1st line
2nd line
Authentication <failed> for <Active Directory> user: <xyz123>
[root@server123 abc123]#

После запуска скрипта я получаю желаемые результаты

[root@server123 abc123]# bash script
[root@server123 abc123]# ls
Internal_LogFile  script  secure.log
[root@server123 abc123]# cat Internal_LogFile
Authentication <failed> for <Active Directory> user: <xyz123>
[root@server123 abc123]#

Но когда secure.log обновляется со следующими журналами сбоев, я имею в виду только новые, поэтому я использую comm & sort, а затем перезаписываю новый вывод в файл.

[root@server123 abc123]# echo -e "4th line\n5th line\n6th line Authentication <failed> for <Active Directory> user: <xyz123>" >> secure.log
[root@server123 abc123]# cat secure.log
1st line
2nd line
Authentication <failed> for <Active Directory> user: <xyz123>
4th line
5th line
6th line Authentication <failed> for <Active Directory> user: <xyz123>
[root@server123 abc123]#

Когда я запускаю его вручную, я вижу только желаемые результаты,

[root@server123 abc123]# comm -23 <(grep "Authentication <failed> for <Active Directory> user: <xyz123>" secure.log | sort) <(sort Internal_LogFile)
6th line Authentication <failed> for <Active Directory> user: <xyz123> 

Но когда я запускаю это, он не перезаписывает файл, хотя я не добавляю его с помощью >>, он просто> в моем сценарии.

[root@server123 abc123]# bash script
[root@server123 abc123]#
[root@server123 abc123]# cat Internal_LogFile
6th line Authentication <failed> for <Active Directory> user: <xyz123>
Authentication <failed> for <Active Directory> user: <xyz123>

Текущий код:

[root@server123 abc123]# cat script
#!/bin/bash
# Checks if the log file exists
if [ ! -e Internal_LogFile ] ; then
grep "Authentication <failed> for <Active Directory> user: <xyz123>" secure.log > Internal_LogFile
else
comm -23 <(grep "Authentication <failed> for <Active Directory> user: <xyz123>" secure.log | sort) <(sort Internal_LogFile) > Internal_LogFile
fi
[root@server123 abc123]#

0 ответов

Другие вопросы по тегам