Переход с одного на другой сервер в сценарии оболочки
Вот сценарий,
$hostname
server1
У меня есть сценарий ниже в server1,
#!/bin/ksh
echo "Enter server name:"
read server
rsh -n ${server} -l mquser "/opt/hd/ca/scripts/envscripts.ksh"
qdisplay
# script ends.
В приведенном выше сценарии я захожу на другой сервер, скажем server2, и выполняю сценарий "envscripts.ksh", который устанавливает несколько псевдонимов (псевдоним "qdisplay"), определенных в нем.
Я могу успешно войти в систему на server1, но не могу использовать псевдоним, установленный скриптом "envscripts.ksh".
Получение ниже ошибки,
-bash: qdisplay: command not found
Можно ли, пожалуйста, указать, что необходимо исправить здесь.
Спасибо виньеш
2 ответа
Другие ответы и комментарии верны. Ваш rsh
команда должна выполнить и сценарий ksh, и последующую команду в одном вызове. Однако я подумал, что предложу дополнительное предложение.
Похоже, что вы пишете пользовательские инструменты для WebSphere MQ. Ваш подход заключается в удаленной оболочке к серверу WMQ и выполнении команды для отображения атрибутов очереди (возможно, глубины).
Задача написания собственного инструментария достойна восхищения, однако попытка сделать это в качестве удаленной оболочки не является оптимальным подходом. Это требует от вас поддерживать библиотеку сценариев на каждом сервере MQ и в некоторых случаях поддерживать эти сценарии на разных языках.
Я бы предположил, что НАМНОГО лучше подходить к использованию клиента MQSC, доступного в http://bit.ly/SupportPacMO72. Это позволяет вам написать сценарии один раз, а затем выполнить их с центрального сервера. Поскольку все команды MQSC выполняются через клиент MQ, один и тот же сценарий обрабатывает Windows, UNIX, Linux, iSeries и т. Д.
Например, вы могли бы написать сценарий, который удаленно запрашивал бы глубину очереди и печатать список всех очередей с глубиной> 0. Затем вы могли бы либо выполнить этот сценарий непосредственно для данного администратора очередей, либо написать сценарий для перебора списка администраторов очередей. и собрать один и тот же отчет для всей сети. Поскольку все сценарии выполняются на одном центральном сервере, вам не нужно беспокоиться о получении $PATH
верно, различия в командах, таких как tr или grep, где установлены ksh или perl и т. д. и т. д.
Десять лет назад я написал сценарии, над которыми вы работаете, когда моя сеть WMQ была маленькой. Когда сеть стала больше, эти различия в платформах поглотили меня, и я не смог поддерживать автоматизацию в рабочем состоянии. Когда я переключился на использование клиента WMQ и имел только один набор сценариев, я смог сохранить его с гораздо меньшими затратами времени и сил.
Следующий скрипт предполагает, что имя QMgr совпадает с именем хоста, кроме как в UPPER CASE. Вместо этого вы можете передать QMgr name, hostname, port и channel в командной строке, чтобы сделать скрипт полезным, если имена QMgr не совпадают с именем хоста.
#! / usr / bin / perl -w # --------------------------------------- ---------------------------------------- # mqsc.pl # # Оболочка для M072 SupportPac mqsc исполняемый файл # Введите имя файла parm в командной строке и имена хостов через STDIN. # Программа пытается подключиться к имени хоста на SYSTEM.AUTO.SVRCONN и порту 1414 #, перенаправляя файл parm в mqsc. # # Предполагаемое использование is... # # mqsc.pl parmfile.mqsC# host1 # host2 # # - или - # # mqsc.pl parmfile.mqscParmfile.mqsc - это любой допустимый скрипт MQSC. Тот, который собирает все глубины очереди, выглядит так:
ОТОБРАЗИТЬ QL(*) CURDEPTH
Я думаю, что реальная проблема заключается в том, что r (o) sh cmd выполняет только удаленный файл envscripts.ksh и что ваш скрипт затем пытается выполнить qdisplay на вашем локальном компьютере.
Вам необходимо "склеить" две команды вместе, чтобы они выполнялись удаленно. Отредактировано за комментарий от Жиля (Он прав)
rosh -n ${server} -l mquser ". /opt/hd/ca/scripts/envscripts.ksh ; qdisplay"
Надеюсь, это поможет.
PS, поскольку вы, кажется, являетесь новым пользователем, если вы получаете ответ, который помогает вам, не забудьте пометить его как принятый, или дать ему + (или -) в качестве полезного ответа