Вы можете включить ведение журнала специально для раздела %post вашего кикстарта. (Я предполагаю кикстарт, потому что вы указали «автоматическая установка» через anaconda; кикстарт - наиболее вероятный метод, о котором я знаю.)
%post [--erroronfail] [--interpreter /usr/bin/python] [--log LOG] [--nochroot]
В официальной документации RHEL7 Installation Guide есть несколько примеров. Даже если вы не устанавливаете RHEL, система кикстарта/анаконды очень стабильна и едина для всех дистрибутивов, которые ее используют. Непосредственно из документа:
# Start of the %post section with logging into /root/ks-post.log
%post --log=/root/ks-post.log
# Mount an NFS share
mkdir /mnt/temp
mount -o nolock 10.10.0.2:/usr/new-machines /mnt/temp
openvt -s -w -- /mnt/temp/runme
umount /mnt/temp
# End of the %post section
%end
В том же документе я предлагаю вам проверить раздел 26.3 Справочник по синтаксису Kickstart , в частности:
Официальная документация по «кикстарту» тоже приличная, но иногда скудная, и ее трудно найти.https://pykickstart.readthedocs.io/en/latest/
echo $(( $(ps aux | grep "test test 123" | wc -l) - 1))
должно быть хорошо
TL;DR:использоватьpgrep -cf "test test 123"
Программа ps
выведет список всех запущенных процессов. В частности, попробуйте:
ps aux
Теперь вы можете просто отфильтровать этот список, используя grep
для поиска вашей строки:
ps aux | grep "test test 123"
Это распечатает совпадающие строки. Чтобы подсчитать их, используйте grep -c
, который вместо этого распечатывает количество совпадающих строк:
ps aux | grep -c "test test 123"
Проблема с этим подходом заключается в том, что описанный выше процесс grep
также появится в результатах. Например, сейчас я редактирую файл с именем test test 123
, но если я запущу команду выше, я увижу как процесс моего файлового редактора, так и сам grep
:
$ ps aux | grep "test test 123"
terdon 2461453 22.0 0.2 392944 79796 pts/1 Sl 15:53 0:02 emacs test test 123
terdon 2462354 0.0 0.0 8832 2292 pts/1 S+ 15:53 0:00 grep --color test test 123
Следовательно, grep -c
вернет 2
вместо1
:
$ ps aux | grep -c "test test 123"
2
Что приводит нас к правильному инструменту для работы, pgrep
. Это инструмент, специально разработанный для поиска процессов :
$ pgrep -cf "test test 123"
1
-c
означает "подсчет совпадений", а -f
означает "поиск по всей командной строке, а не только по имени процесса".
Другой распространенный прием для пропуска самого grep
заключается в использовании одного класса символов -вместо той же строки, чтобы командная строка grep
не содержала строку:
$ ps aux | grep "test test 123"
terdon 2461453 1.2 0.2 392944 79796 pts/1 Sl 15:53 0:02 emacs test test 123
terdon 2476971 0.0 0.0 8832 2236 pts/1 S+ 15:56 0:00 grep --color test test 123
$ ps aux | grep "[t]est test 123"
terdon 2461453 1.2 0.2 392944 79796 pts/1 Sl 15:53 0:02 emacs test test 123
$ ps aux | grep -c "[t]est test 123"
1
Подробнее об этом трюке см. здесь . Но в этом нет необходимости, если в вашей системе есть pgrep
, как в системах Linux.