Я думаю, читая count
в процессе замена препятствует тому, чтобы Вы получили ее статус возврата. Не делайте этого. Вместо этого сохраните результат в переменной или используйте канал.
count=$(count)
if [ $? -eq 0 ]; then
read -r R Q <<<"$count"
…
или
set -o pipefail
if count | { read -r R Q; … }
Другая возможность состоит в том, чтобы использовать PIPESTATUS
переменная для проверки статуса возврата первой команды.
count=$(qstat -tn1 | awk …)
if ((${PIPESTATUS[0]} == 0)); then
read P Q
…
С другой стороны, примите меры, чтобы awk распечатал что-то отличительное (например, ничто), когда его вход будет пуст.
awk '
BEGIN { R = 0; Q = 0; }
$10 == "R" { R++ }
$10 == "Q" { Q++ }
END { if (NR) print R, Q }'
Можно протестировать, если вход команды пуст с ifne
от moreutils или других методов. Но так как Вы передаете по каналу в awk, Вы могли бы также сделать это прямо в awk сценария, который Вы уже имеете.
Если необходимо получить статус возврата от qstat
команда, можно подать его к awk как дополнительная входная строка. Для более легкого парсинга примите меры, чтобы последняя строка имела уникальный формат.
{
qstat -tn1
echo exit_code = $?
} | awk '
…
/^exit_code = / { status = $3 }
END { if (status == 0) print Q, R }
'
Вы, кажется, сбиваете с толку, что Solaris Cluster делает по сравнению с Oracle RAС.
В Solaris Cluster (SunCluster) любое выполнение приложения на самом деле работает на единственном узле в кластере скорее затем на нескольких. Что означает, что Менеджер томов Veritas импортирует связанную Volume Group только на одном из узлов в кластере.
Таким образом, нет никакой проблемы с ним. Если Вы будете надеяться выполнять группу параллельно на нескольких узлах в кластере, то необходимо будет удостовериться, что выполняете VxCFS, который предоставляет менеджеру по Кластерному тому Veritas, которые требуются, чтобы обрабатывать блокировку и синхронизацию.
Oracle Solaris Cluster, раньше Кластер Sun, может смонтировать UFS или файловые системы VxFS параллельно на любом количестве узлов в кластере. Veritas также имеет Кластерного менеджера, который может выполнить схожую функциональность, через VxCFS, как упомянуто Karlson.
Во-первых, добавьте свой VxFS к каждому /etc/vfstab
на каждом узле в кластере:
/dev/vx/dsk/dg1/v1 /dev/vx/rdsk/dg1/v1 /global/v1 vxfs 5 yes log,global
Я собираюсь предположить, что у Вас уже есть группа ресурсов для этого, названного gfs
, и Вы уже зарегистрировались HAStoragePlus
тип ресурса, через clrt register HAStoragePlus
.
Теперь Вы просто создаете ресурс в течение своей глобальной фс:
clrs create -g gfs -t HAStoragePlus -p FileSystemMountPoints="/global/v1" v1-rs
И, включите группу ресурсов:
clrg online -M gfs
Существует много других шагов, необходимых для подъема кластера и выполнения, таким образом, я принимаю определенную базовую линию знания Solaris Cluster.