Если вы не можете понять, как включить подстановку процесса в Bash на новом сервере, возможно, вам следует реорганизовать скрипт, чтобы использовать более традиционную модель обработки.По сути, это сводится к использованию временных файлов.
ps ax |
grep '[p]sfront -p .* -r /home/.*/palace ' |
sed 's| *\([0-9]*\).*/home/\(.*\)/palace.*$|\2|' |
uniq | sort >/tmp/PSFRONT_A
ps ax |
grep '[p]server.* -f /home/.*/palace/psdata/pserver.conf ' |
sed 's| *\([0-9]*\).*/home/\(.*\)/palace.*$|\2|' |
sort >/tmp/PSERVER_A
ERRORS=$(comm -3 /tmp/PSERVER_A /tmp/PSFRONT_A)
rm /tmp/PSERVER_A /tmp/PSFRONT_A
Кстати, это полностью POSIX-совместимая программа, поэтому вы можете изменить строку shebang на #!/bin/sh
, пока вы там.
Вы должны упростить grep | sed
и реорганизовать повторяющиеся функции;Кроме того, правильное использование временных файлов требует использования trap
для удаления временных файлов, даже если сценарий прерывается сигналом на полпути.
t=`mktemp -t -d palaces.XXXXXXXX` || exit 127
trap 'rm -rf $t' 0
trap 'exit 126' 1 2 3 5 15
psg () {
local re
re=$1
ps ax |
sed -n "\\%$re%"'s| *\([0-9]*\).*/home/\(.*\)/palace.*$|\2|p'
}
psg '[p]sfront -p .* -r /home/.*/palace ' |
uniq | sort >$t/PSFRONT_A
psg '[p]server.* -f /home/.*/palace/psdata/pserver\.conf ' |
sort >$t/PSERVER_A
comm -3 $t/PSERVER_A $t/PSFRONT_A >$t/ERRORS
if [ -s $t/ERRORS ]; then
comm -3 $t/PSERVER_A $t/ERRORS
else
cat $t/PSERVER_A
fi
Остальная часть сценария может быть адаптированасоответственно.