Avatar billede kakadue Nybegynder
08. oktober 2003 - 19:26 Der er 4 kommentarer og
1 løsning

Problem med filehandling!

jeg sidder med et script, der angiveligt bl.a. skal tage min uptime, hostname og et par andre ting og sende til en server og derved lave et mindre uptime race. Mit problem er at den nægter at trække min uptime ud. Scriptet er skrevet i linux og jeg sidder med FreeBSD. Jeg forestiller mig det kunne være problemet, men jeg ved det ikke.

#!/usr/bin/perl

use Socket;
use IO::Handle;

open (UPTIME, "</proc/uptime");
$uptime = <UPTIME>;
$uptime =~ /(\d+)/;
$uptime = $1;

$owner = shift || $ENV{USER};
$remote = shift || "fjernet.servername.dk";
$port = 7474;

$iaddr = inet_aton ($remote) || die "Cannot resolve remote host: $remote";
$paddr = sockaddr_in ($port, $iaddr);
$proto = getprotobyname ('tcp');

$hostname = `hostname -f`;
chop ($hostname);

$os = `uname -srm`; chop ($os); $os =~ s/ /-/g;

$string = "uptime $hostname $uptime $os $owner\n";
print $string;

socket (SOCK, PF_INET, SOCK_STREAM, $proto);
connect (SOCK, $paddr) || die "Connect: $!";

autoflush SOCK 1;
print SOCK $string;
$response = <SOCK>;
chop $response;

$response =~ /^okay/ || die "Server responded with '$response'";

Sådan ser det originale script ud. Problemet ligger i de fire linjer med uptime'n. Jeg har testet lige præcis den lille bid på debian og der spytter den et tal ud, f.eks. "4745538", som så må være uptimen i sekunder, men i FreeBSD giver den mig intet.

Nogen gode forslag? :)

På forhånd tak.
Avatar billede simonvalter Praktikant
08. oktober 2003 - 19:32 #1
nu er jeg ikke sådan inde i perl men jeg kan se du prøver at læse /proc/uptime

og den har du jo ikke på freebsd right?
Avatar billede kakadue Nybegynder
08. oktober 2003 - 19:44 #2
Nej.. det har jeg egentlig ikke.. okay, det er jo rart at vide :) Hvad kan jeg så bruge for at hive min uptime ud i sekunder?
Avatar billede kakadue Nybegynder
08. oktober 2003 - 20:01 #3
Okay jeg fandt ud af det, med lidt roderi med sysctl. Men tak for pointeren om at jeg IKKE har nogen /proc/uptime ;)

Jeg er en hat til perl, så der er sikkert andre mere raffinerede muligheder, men det følgende virker i hvert fald:

$boottime = `sysctl -n kern.boottime | awk '{print \$4}'`;
chop($boottime);
$boottime =~ s/,//g;
$currenttime = `date +%s`; chop($currenttime);
$uptime = $currenttime - $boottime;
Avatar billede simonvalter Praktikant
08. oktober 2003 - 20:03 #4
hehe det sad jeg lige og roede med ;)

tag også og hiv os hostname ud den vej
Avatar billede kakadue Nybegynder
08. oktober 2003 - 20:07 #5
ja okay, til det formål er der også bare kommandoen hostname :) dog er der ikke nogen -f parameter, som der ifølge det originale script åbenbart er i linux-versionen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester