приветствую!есть два сервера,
на первом выполняется скрипт который через 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 выполняет на втором сервере другой
>скрипт
>
>в скрипте 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 выполняет на втором сервере другой
>>скрипт
>>
>>в скрипте 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)]; убрать надо, оно там не нужно :))