Различение временных меток записей журнала из сценария bash

How can I parse argument using C?

POSIX предоставляет getopt для анализа аргументов строки команды -.

В системах Linux библиотека GNU C предоставляет расширенную функцию getopt _long , которая позволяет использовать параметры с длинными именами в дополнение к односимвольным -символьным флагам, поддерживаемым простой getopt.

In linux, pressing 'tab' auto fills the command. I would like to have similar functionalities in my utility. How would I program that using C?

Если вы хотите, чтобы ваша программа показывала собственное приглашение и обеспечивала редактирование строк и контекстно-зависимое -автодополнение, загляните в readline .

While developing utilities(of any kind), Is it better to use the functions provided by the linux kernel or continue with those in libc?

Libc — это то, что в любом случае предоставляет вам привязки системных вызовов (, если только вы не пойдете на нелепые крайности, чтобы избежать этого, что обычно включает в себя написание вашего собственного кода на ассемблере и не принесет вам ничего, кроме головной боли ).

Как правило, пользуйтесь услугами высочайшего -уровня, которые позволят вам делать то, что вам нужно, если только у вас нет четких, конкретных и взвешенных причин производительности, говорящих об обратном.

0
15.10.2020, 15:43
1 ответ

Создайте вместилище (файл, скажем, ~/spool/last_jobrec), где вы можете регистрировать последнюю метку времени, записанную вашим заданием cron. Сравните его с отметкой времени последней добавленной записи журнала. Когда они разные, отправьте уведомление, когда они идентичны, ничего не делайте.

$ mkdir -p /path/to/spool    # choose a place for spool directory.
$ 
$ cat /myscripts/joberror.sh
#!/bin/bash
touch /path/to/spool/last_jobrec   # ensure appropriate permissions
latest_logentry=$(grep --no-messages --no-filename --max-count=1 -e "Too many open files" <(tac /share/logs/access.log))
latest_logstamp=$(cut -d' ' -f1,2 <(echo $latest_logentry))
if [ "$latest_logstamp" != "$(cat /path/to/spool/last_jobrec)" ]; then
    echo "$latest_logentry" | mailx -s "Batch Error " to XYZ@gmail.com
    echo "$latest_logstamp" >| /path/to/spool/last_jobrec
fi

Не проверено. В частности, я не использую утилиту mailx.

Замечания:
1)Я предполагаю, что новые записи журнала добавляются в конце файла журнала.
2)Чтобы заполнить переменную last_entrystampвыше, я использовал выражение, основанное на grep. Это потому, что я консервативно предполагаю, что ваш файл журнала может содержать другие записи в виде строк, не содержащих строку «Слишком много открытых файлов». Если нет, просто замените строку grepв скрипте наlatest_logentry=$(tail -1 /share/logs/access.log)

0
18.03.2021, 22:57

Теги

Похожие вопросы