Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
Часто, я буду просто использовать исходную версию Tcl, Ожидают. У Вас только должно быть это на локальной машине. Если я в программе с помощью Perl, я делаю это с Сеть:: SSH:: Ожидайте . Другие языки имеют подобный, "ожидают" инструменты.
Вот сценарий, чтобы сделать команду SSH на нескольких машинах, он может помочь:
#!/bin/bash
MACHINES="machine1 machine2 machine3 machine4 machine5 machine6"
for m in $MACHINES
do
cmd="ssh $m '$*'"
eval $cmd
done
Вы могли даже поместить это так, это находится в Вашем пути, назовите его, чему-то нравится, буду, затем просто ввести, буду управлять.
Я не уверен, будет ли этот метод работать на все, что Вы хотите, но можно попробовать что-то вроде этого:
$ cat your_script.sh | ssh your_host bash
, Который запустит скрипт (который находится локально) на удаленном сервере.
Вы хотите DSH или распределенную оболочку, которая используется в кластерах много. Вот ссылка: dsh
у Вас в основном есть группы узла (файл со списками узлов в них), и Вы указываете, на какой группе узла Вы желаете к командам выполнения затем, Вы использовали бы dsh, как Вы будет ssh к командам выполнения на них.
dsh -a /path/to/some/command/or/script
Это выполнит команду на всех машинах одновременно и возвратит вывод, снабженный префиксом имя хоста. Команда или сценарий должны присутствовать в системе, таким образом, общий каталог NFS может быть полезен для этих видов вещей.
Хотя это - сложная тема, я могу настоятельно рекомендовать Capistrano.
Можно выполнить ту же команду на нескольких серверах сразу с инструментом как кластерный ssh. Ссылка к обсуждению кластера ssh на пакете Debian дневного блога.
Ну, поскольку шаг 1 и 2 не является там веб-интерфейсом менеджера кота; Вы могли написать сценарий этого с завихрением, или zsh с libwww включают.
Для SSH Вы обращаетесь: 1) не запрашиваются пароль (используйте ключи), 2) передайте команду (команды) командной строке SSH, это подобно rsh
в надежной сети.
Другие сообщения показали Вам, что сделать, и я, вероятно, использовал бы sh
также, но я испытаю желание использовать perl
как ssh tomcatuser@server perl -e 'do-everything-on-one-line;'
, или Вы могли сделать это:
или scp the_package.tbz tomcatuser@server:the_place/.
ssh tomcatuser@server /bin/sh <<\EOF
определяют материал как [1 125] TOMCAT_WEBAPPS=/usr/local/share/tomcat/webapps
tar xj the_package.tbz
, или rsync rsync://repository/the_package_place
mv $TOMCAT_WEBAPPS/old_war $TOMCAT_WEBAPPS/old_war.old
mv $THE_PLACE/new_war $TOMCAT_WEBAPPS/new_war
touch $TOMCAT_WEBAPPS/new_war
[Вы не должны обычно перезапускать кота]
mv $THE_PLACE/vhost_file $APACHE_VHOST_DIR/vhost_file
$APACHECTL restart
[возможно, должен был бы войти в систему как апачский пользователь для перемещения того файла и перезапуска]
EOF
Вы посмотрели на вещи как Марионетка или Cfengine. Они могут сделать то, что Вы хотите и вероятно намного больше.
Дать Вам структуру, без фактического кода.
pssh может быть интересным с тех пор, в отличие от большинства решений, упомянутых здесь, команды выполняются параллельно.
(Для моего собственного использования, я записал более простой маленький сценарий, очень похожий на один GavinCattell, это зарегистрировано здесь - на французском языке ).
Можно передать локальный сценарий по каналу к удаленному серверу и выполнить его с одной командой:
ssh -t user@host 'sh' < path_to_script
Это может быть далее автоматизировано при помощи аутентификации с открытым ключом и переносящийся со сценариями для выполнения параллельного выполнения.
Смотрите на, Ожидают (man expect
)
, я выполнил подобные задачи в прошлом использовании, Ожидают.
Проблема того, как к командам выполнения на многих серверах сразу подошел в списке рассылки Perl на днях и я дам ту же рекомендацию , которую я дал там , который должен использовать gsh
:
http://outflux.net/unix/software/gsh
gsh подобен" for box in box1_name box2_name box3_name
" решение уже, учитывая , но я нахожу, что gsh более удобен. Вы настраиваете/etc/ghosts файл, содержащий Ваши серверы в группах, таких как сеть, дб, RHEL4, x86_64, или безотносительно (фантомы человека) затем Вы используете ту группу при вызове gsh.
[pdurbin@beamish ~]$ gsh web "cat /etc/redhat-release; uname -r"
www-2.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-2.foo.com: 2.6.9-78.0.1.ELsmp
www-3.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-3.foo.com: 2.6.9-78.0.1.ELsmp
www-4.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-4.foo.com: 2.6.18-92.1.13.el5
www-5.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-5.foo.com: 2.6.18-92.1.13.el5
[pdurbin@beamish ~]$
можно также объединить или разделить фантомные группы, с помощью web+db или сеть-RHEL4, например.
я также упомяну, что, в то время как я никогда не использовал shmux, , его веб-сайт содержит список программного обеспечения (включая gsh), который позволяет Вам команды выполнения на многих серверах сразу. Capistrano был уже упомянут и (от того, что я понимаю), мог быть в том списке также.
Можно запустить локальный скрипт как показано che и Yang, и/или можно использовать Здесь документ:
ssh root@server /bin/sh <<\EOF
wget http://server/warfile # Could use NFS here
cp app.war /location
command 1
command 2
/etc/init.d/httpd restart
EOF
Можно сделать это тот же способ, которым Вы сделали прежде, просто пишете сценарий его вместо того, чтобы делать его вручную. Следующие пульты ДУ кода к машине, названной 'loca' и выполнениями две команды там. То, что необходимо сделать, просто вставляют команды, которые Вы хотите выполнить туда.
che@ovecka ~ $ ssh loca 'uname -a; echo something_else' Linux loca 2.6.25.9 #1 (blahblahblah) something_else
Затем для итерации через все машины сделайте что-то как:
for box in box1_name box2_name box3_name do ssh $box 'commmands_to_run_everywhere' done
, Чтобы заставить эту ssh вещь работать, не вводя пароли все время, необходимо будет настроить ключевую аутентификацию. Можно читать об этом в IBM developerworks.
Вы можете попробовать paramiko . Это ssh-клиент на чистом питоне. Вы можете запрограммировать свои сеансы ssh. Нечего устанавливать на удаленные машины.
См. Эту отличную статью о том, как его использовать.
Multixterm отлично подходит для этого, и позволяет легко вернуть в последовательность 1 из n машин.