0

以下のようなシェルスクリプトがあります。

このプロセスを1分間だけ実行したいと思います。

したがって、プロセス時間を確認し、実行時間が1分を超える場合はプロセスを強制終了します。誰か助けてくれませんか?

var=`ps -eaf | pgrep -f getShippingPriceUK.php | wc -l`
if [ $var -lt "1" ]; then
echo "Prozess läuft nicht"
wget -q --timeout=0 --delete-after http://xxxx/001_yakodo/getShippingPrice12.php > /dev/null 2&>1 &
else
echo "Prozess läuft"
fi
4

1 に答える 1

1

perlがインストールされている場合は、このperlスクリプトを使用できます。

名前を付けて保存しtimeout、のディレクトリの1つに保存し$PATH、実行可能にしてから、

your-script arg1...

timeout 1m your-script arg1...

#!/usr/bin/perl

use warnings;
use strict;


$SIG{CHLD} = sub { wait; exit };

my $timeout = shift;
for ($timeout) {
    if (defined and /^(\d+)([smh])$/) {
    $_ = $1 * ("s" eq $2 ? 1 : "m" eq $2 ? 60 : 3600);
    } elsif (!defined or /\D/) {
    die "First argument must be time to wait.\n";
    }
}

my @command = @ARGV or die "Must give a command to run.\n";

my $child = fork;
for ($child) {
    die "$0: Cannot fork: $!\n" unless defined;
    last if $child;
    exec {$command[0]} @command or die "$0: Cannot exec: $!\n";
}

close STDIN;
close STDOUT;
close STDERR;
sleep $timeout;
kill TERM => $child;
sleep 5;
kill KILL => $child;
于 2012-07-20T09:32:25.367 に答える