URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 62106
[ Назад ]

Исходное сообщение
"ssh и & "

Отправлено lynx , 24-Ноя-05 15:36 
приветствую!

есть два сервера,
на первом выполняется скрипт который через ssh выполняет на втором сервере другой скрипт

в скрипте c server1
ssh server2 /root/bin/script2

и все бы хорошо, но script2 (который на server2)
запускает background процесс
/root/bin/script_bg &

script_bg сразу не заканчивается и работать может очень долго

и получаем, что
ssh server2 /root/bin/script2
в скрипте на sserver1 не заканчивается, то что после этого уже ни чего не выполняется.

вот простой пример на ту же тему:
server1# ssh server2
server2# sleep 100 &
[1] 21229
server2# logout
соединение не разъединяется пока не отработает sleep 100,
сообщение "Connection to server2 closed." мы получаем только после этих 100 секунд.

вопрос собственно: можно ли запустить через ssh скрипт вроде script2, который бы в свою очередь запускал какой-нибудь script_bg&, и нормально завершить работу ssh не дожидаясь завершения script_bg?


если такое где-то уже обсуждалось киньте ссылочку, сам ищу, но пока не нашел....


Содержание

Сообщения в этом обсуждении
"ssh и & "
Отправлено lynx , 24-Ноя-05 16:43 
>приветствую!
>
>есть два сервера,
>на первом выполняется скрипт который через ssh выполняет на втором сервере другой
>скрипт
>
>в скрипте c server1
>ssh server2 /root/bin/script2
>
>и все бы хорошо, но script2 (который на server2)
>запускает background процесс
>/root/bin/script_bg &
>
>script_bg сразу не заканчивается и работать может очень долго
>
>и получаем, что
>ssh server2 /root/bin/script2
>в скрипте на sserver1 не заканчивается, то что после этого уже ни
>чего не выполняется.
>
>вот простой пример на ту же тему:
>server1# ssh server2
>server2# sleep 100 &
>[1] 21229
>server2# logout
>соединение не разъединяется пока не отработает sleep 100,
>сообщение "Connection to server2 closed." мы получаем только после этих 100 секунд.
>
>
>вопрос собственно: можно ли запустить через ssh скрипт вроде script2, который бы
>в свою очередь запускал какой-нибудь script_bg&, и нормально завершить работу ssh
>не дожидаясь завершения script_bg?
>
>
>если такое где-то уже обсуждалось киньте ссылочку, сам ищу, но пока не
>нашел....

временно решил так:

вместо script_bg& - fork.pl script_bg


fork.pl
==cut==================
#!/usr/bin/perl
use strict;

my $argc = scalar @ARGV;

if (scalar $argc < 1) { die "parameter missing."; };

my @arg = @ARGV[0..($argc-1)];

my $pid = fork;

if ($pid == 0) {
    open(STDIN, '</dev/null') || die "Can't close STDIN [$!]";
    open(STDOUT,'>/dev/null') || die "Can't close STDOUT [$!]";
    open(STDERR,'>/dev/null') || die "Can't close STDERR [$!]";
    exec @arg;
    die "cant exec @arg"
}
elsif($pid > 0)
{
    print "PID-$pid\n";
}
else
{
    die "fork error.";
}
==cut==================



"ssh и & "
Отправлено lynx , 24-Ноя-05 16:44 
>>приветствую!
>>
>>есть два сервера,
>>на первом выполняется скрипт который через ssh выполняет на втором сервере другой
>>скрипт
>>
>>в скрипте c server1
>>ssh server2 /root/bin/script2
>>
>>и все бы хорошо, но script2 (который на server2)
>>запускает background процесс
>>/root/bin/script_bg &
>>
>>script_bg сразу не заканчивается и работать может очень долго
>>
>>и получаем, что
>>ssh server2 /root/bin/script2
>>в скрипте на sserver1 не заканчивается, то что после этого уже ни
>>чего не выполняется.
>>
>>вот простой пример на ту же тему:
>>server1# ssh server2
>>server2# sleep 100 &
>>[1] 21229
>>server2# logout
>>соединение не разъединяется пока не отработает sleep 100,
>>сообщение "Connection to server2 closed." мы получаем только после этих 100 секунд.
>>
>>
>>вопрос собственно: можно ли запустить через ssh скрипт вроде script2, который бы
>>в свою очередь запускал какой-нибудь script_bg&, и нормально завершить работу ssh
>>не дожидаясь завершения script_bg?
>>
>>
>>если такое где-то уже обсуждалось киньте ссылочку, сам ищу, но пока не
>>нашел....
>
>временно решил так:
>
>вместо script_bg& - fork.pl script_bg
>
>
>fork.pl
>==cut==================
>#!/usr/bin/perl
>use strict;
>
>my $argc = scalar @ARGV;
>
>if (scalar $argc < 1) { die "parameter missing."; };
>
>my @arg = @ARGV[0..($argc-1)];
>
>my $pid = fork;
>
>if ($pid == 0) {
>    open(STDIN, '</dev/null') || die "Can't close STDIN [$!]";
>
>    open(STDOUT,'>/dev/null') || die "Can't close STDOUT [$!]";
>    open(STDERR,'>/dev/null') || die "Can't close STDERR [$!]";
>    exec @arg;
>    die "cant exec @arg"
>}
>elsif($pid > 0)
>{
>    print "PID-$pid\n";
>}
>else
>{
>    die "fork error.";
>}
>==cut==================


my @arg = @ARGV[0..($argc-1)]; убрать надо, оно там не нужно :))