Jak zabít příkaz po x sekundách?

fotka

  • ***
  • 216
    • Zobrazit profil
    • Linux forum
    • E-mail
Jak zabít příkaz po x sekundách?
« kdy: 23. 04. 2014, 10:56:27 »
zkoušel jsem:
Kód: [Vybrat]
ping xy.cz && sleep 120 | pkill -f xy.cz >> output.txt
snažím se zjisti jak výsledek nějakého příkazu exportovat do souboru přičemž to exportuje jen výsledek, který vyjede za poslední 2 minuty. chci to použít v bash skriptu.. děkuji
Linux nováček - CeskeForum.com


Re:Jak zabít příkaz po x sekundách?
« Odpověď #1 kdy: 23. 04. 2014, 11:02:35 »
Kód: [Vybrat]
$ ping 1.1.1.1 & sleep 2 && kill %1

tonda_

Re:Jak zabít příkaz po x sekundách?
« Odpověď #2 kdy: 23. 04. 2014, 11:04:18 »
pro ping bych udelal
ping -i -c 120 xxx to samo prestance port 120 secs

pokud pro neco jineho

./udelejmito &
zajimavejpid=$!
sleep xxx
kill $zajimavejpid


zamozrejme nejaky testy okolo ze to stale bezi, ze se to pustilo atd atd


fotka

  • ***
  • 216
    • Zobrazit profil
    • Linux forum
    • E-mail
Re:Jak zabít příkaz po x sekundách?
« Odpověď #3 kdy: 23. 04. 2014, 11:07:01 »
Kód: [Vybrat]
$ ping 1.1.1.1 & sleep 2 && kill %1

Určitě to funguje?

# ping 1.1.1.1 & sleep 2 && echo %1
[7] 23787
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
%1
Linux nováček - CeskeForum.com

b00n

Re:Jak zabít příkaz po x sekundách?
« Odpověď #4 kdy: 23. 04. 2014, 11:25:33 »


McFly

  • *****
  • 591
    • Zobrazit profil
    • E-mail
Re:Jak zabít příkaz po x sekundách?
« Odpověď #5 kdy: 23. 04. 2014, 11:33:47 »
Kód: [Vybrat]
$ ping 1.1.1.1 & sleep 2 && kill %1

Určitě to funguje?

# ping 1.1.1.1 & sleep 2 && echo %1
[7] 23787
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
%1

u mne OK


Kód: [Vybrat]
root@s1:~# ping 1.1.1.1 & sleep 2 && kill %1
[1] 18369
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
root@s1:~#


fotka

  • ***
  • 216
    • Zobrazit profil
    • Linux forum
    • E-mail
Re:Jak zabít příkaz po x sekundách?
« Odpověď #6 kdy: 23. 04. 2014, 11:44:03 »
Citace
./udelejmito &
zajimavejpid=$!
sleep xxx
kill $zajimavejpid

Zkusil jsem to dát do skriptu v několika variantách, ale zdá se že to ten skript/proces nezabije..

Citace
output=$(/root/tra*/script.pl $domain && pid=$! && sleep 4;  kill $pid)

echo $output > $domain.outfile.txt
Linux nováček - CeskeForum.com

mhepp

Re:Jak zabít příkaz po x sekundách?
« Odpověď #7 kdy: 23. 04. 2014, 11:45:58 »
b00n:

oni ten timeout asi opravdu neznají...

fotka

  • ***
  • 216
    • Zobrazit profil
    • Linux forum
    • E-mail
Re:Jak zabít příkaz po x sekundách?
« Odpověď #8 kdy: 23. 04. 2014, 13:01:55 »
[quote ]
oni ten timeout asi opravdu neznají...
[/quote]
timeout není naisntalovaný na mém redhat a ani v yum není, chtěl bych to zvládnout s příkazy, které jsou součástí většiny běžných linux distribucí
Linux nováček - CeskeForum.com

Michal

Re:Jak zabít příkaz po x sekundách?
« Odpověď #9 kdy: 23. 04. 2014, 13:45:03 »
timeout je v coreutils, coz neni nic nestandardniho, ale az od verze 7, takze v RHEL/CentOSu 6 uz je, ale v 5 ne.

mhepp

Re:Jak zabít příkaz po x sekundách?
« Odpověď #10 kdy: 23. 04. 2014, 13:51:14 »
timeout znám minimálně 8 let, takže určitě půjde někde vyhrabat i pro CentOS.

Ivan

Re:Jak zabít příkaz po x sekundách?
« Odpověď #11 kdy: 23. 04. 2014, 16:38:49 »
timeout není naisntalovaný na mém redhat a ani v yum není, chtěl bych to zvládnout s příkazy, které jsou součástí většiny běžných linux distribucí

A co Perl? V Perl-u jde vsechno

Kód: [Vybrat]
my $TIMEOUT_IN_SECONDS = 5;
eval {
    local $SIG{ALRM} = sub { die "alarm\n" };
    alarm($TIMEOUT_IN_SECONDS);
    # do stuff that might timeout.
    my $output = `ping 1.1.1.1`;
    alarm(0);
    print $output;
};
if ($@) {
    # handle timeout condition.
}

Eval "vytvori novou instanci virtualni masiny". A v ni se vykona anonymni blok. Ten bud vykona prikaz a ukonci se, anebo zachyti signal ALARM a umre.

noef

  • *****
  • 897
    • Zobrazit profil
    • E-mail
Re:Jak zabít příkaz po x sekundách?
« Odpověď #12 kdy: 23. 04. 2014, 17:57:08 »
reseni od tonda_ mi funguje:
Kód: [Vybrat]
xxx@server:~/test0$ ping google.com > sleepKiller.output.txt & pid=$! ; echo "got $pid" ; sleep 2; kill $pid
[1] 31368
got 31368
xxx@server:~/test0$ cat sleepKiller.output.txt
PING google.com (173.194.35.3) 56(84) bytes of data.
64 bytes from mil01s16-in-f3.1e100.net (173.194.35.3): icmp_req=1 ttl=52 time=29.2 ms
64 bytes from mil01s16-in-f3.1e100.net (173.194.35.3): icmp_req=2 ttl=52 time=30.3 ms
[1]+  Terminated              ping google.com > sleepKiller.output.txt