OVH Cloud OVH Cloud

grep retourner une liste de serveurs

13 réponses
Avatar
yvon.thoravalNO-SPAM
j'ai un fichier de config qui contient les lignes suivantes :

server = News.Individual.NET
server = news.free.fr
server = news.eclipse.org


si je fais :

sudo grep "^[[:space:]]*server[[:space:]]*=[[:space:]]*"
/etc/leafnode/config

ça ne me retourne bien que ces lignes là (le fichier de conf contient un
tas d'autres ligne.

Mais ce que je voudrais c'est obtenir un "tableau" comme ça :

News.Individual.NET
news.free.fr
news.eclipse.org

de manière à tester, individuellement, si le serveur est reachable



--
yt

3 réponses

1 2
Avatar
yvon.thoravalNO-SPAM
Luc Heinrich wrote:

L'excellent "The Ruby Way":
<http://www.amazon.com/exec/obidos/ISBN72320835>


je viens de le commander...

+ pratique d'avoir un bouquin sous le coude que chercher sur le net.
--
yt

Avatar
lucsky
Luc Heinrich wrote:

----------------------------------------------------
#! /usr/bin/ruby

File.open( "/etc/leafnode/config" ) do |file|
for line in file
if line =~ /^s*servers*=s*(.*)/
if `scutil -r #{$1}`.chomp == "Reachable"
unless `ps -acx | grep MacSOUP`.empty?
system "fetchnews"
exit 0
end
end
end
end
end

exit 1
----------------------------------------------------


Une autre version, encore plus rigolote et Rubyesque:

-----------------------------------------------------------------------
#!/usr/bin/ruby

pattern = /^s*servers*=s*(.*)/
servers = IO.readlines( "/etc/leafnode/config" ).grep( pattern ) { $1 }

reachable = lambda { |s| `scutil -r #{s}`.chomp == "Reachable" }
macsoup = lambda { not `ps -acx | grep MacSOUP`.empty? }
fetchnews = lambda { system "fetchnews" }

servers.each do |s|
fetchnews[] & (exit 0) if reachable[s] && macsoup[]
end
-----------------------------------------------------------------------

C'est bô. :)

--
Luc Heinrich -

Avatar
yvon.thoravalNO-SPAM
Luc Heinrich wrote:

C'est bô. :)


c vrai °;))

mais j'aimerai ajouter qqc à ce script, ce sont les options de
fetchnews.

y-a t'il un moyen, simple, de prendre tous les arguments du script et de
les refiler à fetchnews, dans le cas, comme aujourd'hui, le script n'a
pas, en lui-même d'arguments...

j'attends le bouquin "The Ruby Way"

Au cas où tu aurais du temps à perdre...

Un script perl :
-----------------------------------------------------------------------
#! /usr/bin/env perl

# syslog-Ausgabe so √§ndern, dass ab der zweiten Zeile eine
# Zeitdifferenz zur vorigen Zeile besteht.
# perl -MCPAN -e shell 'install HTTP::Date'


use HTTP::Date;

while(<>) {
chomp;
if (m/^(... .. ..:..:..) (.*)/) {
$t = str2time($1);

if ($old) {
$d = $t - $old;
$s = sprintf "%15u", $d;
print "$s $2n";
} else {
print "$1 $2n";
}
$old = $t;
}
}
-----------------------------------------------------------------------

il prend un log qui a cette tête là :

Sep 16 16:21:41 localhost leafnode[565]: <QUIT
Sep 16 16:21:41 localhost leafnode[565]: >205 Always happy to serve!
[...]

et sort :

Sep 16 16:21:41 localhost leafnode[565]: <QUIT
0 localhost leafnode[565]: >205 Always happy to serve!
[...]

donc, laisse la première ligne telle quelle et pour toutes les suivantes
calcule la différence de temps en secondes par rapport à la précédente.

ça permet de voir ce qui coince dans un server de news...
--
yt

1 2