Perl linux probleem --> Can't exec "ln": Too many levels of

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Red devil
  • Registratie: December 1999
  • Laatst online: 21:08
Beste tweakerts,

Ben een tool aan het draaien die de volgende error geeft:

code:
1
2
Can't exec "ln": Too many levels of symbolic links at gm_es.pl line 680.
Error on system: create link for file


Ik heb het idee dat het wel eens zou kunnen liggen aan het type Linux OS (nu scientific linux, voorhen CentOS) want hij draaide vroeger wel goed.
Heb nog geprobeerd om in een folder te draaien die niet zo "diep" staat, zodat de folder structuur niet zo diep zou gaan maar dat hielp ook niet. Iemand anders enig idee?

Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 23:03

Hero of Time

Moderator LNX

There is only one Legend

Wat heb je zelf kunnen vinden over die melding? Welke versie van Perl wordt er gebruikt en gebruikte je eerst? Is het bestand waar naar verwezen wordt het script wat je zelf geschreven hebt? Wat staat er op die lijn/wat is de functie die je gebruikt?

Je kan veel meer informatie geven dan alleen de error. Ik raad je aan om het NOS Beleid na te lezen zodat je weet waar een OP aan moet voldoen hier. Eigen inzet wordt vaker beloond dan een vraag stellen zonder.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • Red devil
  • Registratie: December 1999
  • Laatst online: 21:08
Hero Of Time schreef op zaterdag 14 juli 2012 @ 13:20:
Wat heb je zelf kunnen vinden over die melding? Welke versie van Perl wordt er gebruikt en gebruikte je eerst? Is het bestand waar naar verwezen wordt het script wat je zelf geschreven hebt? Wat staat er op die lijn/wat is de functie die je gebruikt?

Je kan veel meer informatie geven dan alleen de error. Ik raad je aan om het NOS Beleid na te lezen zodat je weet waar een OP aan moet voldoen hier. Eigen inzet wordt vaker beloond dan een vraag stellen zonder.
Je hebt gelijk. Het betreft een tool die ik niet zelf heb geschreven, heb weinig tot geen kaas gegeten van perl. Het betreft een foutmelding in deze methode van het perl bestand:

code:
1
2
3
4
5
6
sub RunCommand
{
  my ( $com, $mess ) = @_;
  my $res = system( $com );
  if( $res ) { die "Error on system: $mess\n"; }
}


en dan gaat het fout @ de 2e regel.

De oorspronkelijke server draaide :

This is perl, v5.8.8 built for x86_64-linux-thread-multi

en de nieuwe:

This is perl 5, version 14, subversion 1 (v5.14.1) built for x86_64-linux

Verder vind je met google niet echt veel relevante zaken. Het lijkt erop dat het aantal symbolic links wordt overschreden (duh) en de tool draaide initieel op een soort SAN. Heb al geprobeerd @local disc en als root, beide zonder succes.

Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Je probeert een link in een link naar een dir in een link naar een dir etc. te maken. Dat mag maar tot een bepaald niveau.

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

  • Red devil
  • Registratie: December 1999
  • Laatst online: 21:08
CyBeR schreef op zaterdag 14 juli 2012 @ 14:34:
Je probeert een link in een link naar een dir in een link naar een dir etc. te maken. Dat mag maar tot een bepaald niveau.
Precies. In de file die wordt geprocessed zitten allemaal losse strings (dna sequences) die worden geanalyseerd. Heb de file in kleine stukjes gehakt en 1 stukje geprobeerd, maar dat gaat ook al mis.

Acties:
  • 0 Henk 'm!

  • Big Mama
  • Registratie: Mei 2000
  • Laatst online: 21:36
Het probleem zit dan ook niet in perl, maar in het filesysteem. Het commando 'ln' (wat het perlprogramma probeert uit te voeren) wil een link maken naar een link naar een link naar een link ... en dat is net een niveautje te diep. Als je hetzelfde uit zou voeren vanuit een shell, zou je tegen hetzelfde probleem aanlopen.

Computers follow your orders, not your intentions.


Acties:
  • 0 Henk 'm!

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 15-07 15:35

leuk_he

1. Controleer de kabel!

waarschijnlijk heb je een symbolyc link naar een directory die naar zichzelf verwijst.

Als je uitvind welke commando in $com zit (afdrukken?) dan heb je wellicht een hint wat daar fout gaat.

Andere mogelijkheid is dat je een ander filesysteem draait (ext3/ext4 etc) dat andere limieten heeft.

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


Acties:
  • 0 Henk 'm!

  • superduper
  • Registratie: Juli 2001
  • Laatst online: 17:31

superduper

Z3_3.0 Woeiiii

Red devil schreef op zaterdag 14 juli 2012 @ 14:33:
[...]


Je hebt gelijk. Het betreft een tool die ik niet zelf heb geschreven, heb weinig tot geen kaas gegeten van perl. Het betreft een foutmelding in deze methode van het perl bestand:

code:
1
2
3
4
5
6
sub RunCommand
{
  my ( $com, $mess ) = @_;
  my $res = system( $com );
  if( $res ) { die "Error on system: $mess\n"; }
}


en dan gaat het fout @ de 2e regel.

De oorspronkelijke server draaide :

This is perl, v5.8.8 built for x86_64-linux-thread-multi

en de nieuwe:

This is perl 5, version 14, subversion 1 (v5.14.1) built for x86_64-linux

Verder vind je met google niet echt veel relevante zaken. Het lijkt erop dat het aantal symbolic links wordt overschreden (duh) en de tool draaide initieel op een soort SAN. Heb al geprobeerd @local disc en als root, beide zonder succes.
HIermee is het niet mogelijk goed te troubleshooten omdat deze routine een opdracht door het systeem laat uitvoeren die je meegeeft aan de subroutine aanroep dmv RunCommand(commando, nogiets).

Waarschijnlijk is die opdracht inderdaad om symbolic links aan te maken waarbij je er of teveel aanmaakt of in een lus raakt.

Dat ligt niet aan je systeem maar waarschijnlijk aan het script of de hoeveelheid enrties die je er doorheen probeert te duwen (als hij bv voor elke entry een link wil aanmaken).

Ik weet niet precies wat je wilt doen, maar ik analyseer dagelijks (veel..) DNA seq. mbv perl dus misschien kan ik je nog verder helpen.

Acties:
  • 0 Henk 'm!

  • Red devil
  • Registratie: December 1999
  • Laatst online: 21:08
superduper schreef op zaterdag 14 juli 2012 @ 17:48:
[...]


HIermee is het niet mogelijk goed te troubleshooten omdat deze routine een opdracht door het systeem laat uitvoeren die je meegeeft aan de subroutine aanroep dmv RunCommand(commando, nogiets).

Waarschijnlijk is die opdracht inderdaad om symbolic links aan te maken waarbij je er of teveel aanmaakt of in een lus raakt.

Dat ligt niet aan je systeem maar waarschijnlijk aan het script of de hoeveelheid enrties die je er doorheen probeert te duwen (als hij bv voor elke entry een link wil aanmaken).

Ik weet niet precies wat je wilt doen, maar ik analyseer dagelijks (veel..) DNA seq. mbv perl dus misschien kan ik je nog verder helpen.
Bedankt voor je aanbod, werk alleen voor bedrijf dus kan jammergenoeg niks opsturen (betreft trouwens een gen predictie tool). We hebben trouwens betaald voor de tool dus heb ik het bedrijf al aangeschreven die het aan ons verkocht heeft. Maandag maar even kijken of er nog wat perl-goeroes zijn die geen vakantie hebben :)

Acties:
  • 0 Henk 'm!

  • sam.vimes
  • Registratie: Januari 2007
  • Laatst online: 08-06 08:44
Red devil schreef op zaterdag 14 juli 2012 @ 14:33:
[...]
code:
1
2
3
4
5
6
sub RunCommand
{
  my ( $com, $mess ) = @_;
  my $res = system( $com );
  if( $res ) { die "Error on system: $mess\n"; }
}


en dan gaat het fout @ de 2e regel.
Voeg boven de system()-regel maar eens een debug-regel toe:
code:
1
warn "RunCommand=>[$com]\n";

zodat je weet welk extern commando er uitgevoerd gaat worden.
Zoals Big Mama al zegt: het ligt niet aan Perl maar aan je filesystem.

Ik verwacht dat het commando iets van
code:
1
ln -sf fromfile destfile

zal zijn. Merkwaardig dat daarvoor een extern commando wordt aangeroepen, want Perl kent zelf ook een functie symlink.

Acties:
  • 0 Henk 'm!

  • Red devil
  • Registratie: December 1999
  • Laatst online: 21:08
sam.vimes schreef op maandag 16 juli 2012 @ 15:36:
[...]

Voeg boven de system()-regel maar eens een debug-regel toe:
code:
1
warn "RunCommand=>[$com]\n";

zodat je weet welk extern commando er uitgevoerd gaat worden.
Zoals Big Mama al zegt: het ligt niet aan Perl maar aan je filesystem.

Ik verwacht dat het commando iets van
code:
1
ln -sf fromfile destfile

zal zijn. Merkwaardig dat daarvoor een extern commando wordt aangeroepen, want Perl kent zelf ook een functie symlink.
Bedankt! Zo kon ik het iig goed volgen. Heb het op meerdere machines getest. Op 1 machine knalt de tool er met deze melding uit:

code:
1
2
3
RunCommand=>[ln -s ../data/dna.fna]
Can't exec "ln": Too many levels of symbolic links at //gmes/gm_es.pl line 681.
Error on system: create link for dna file


bij een ander bij deze:
code:
1
2
3
RunCommand=>[cat dna.fa_* > tmp.seq]
sh: /bin/cat: Argument list too long
Error on system: combine all training data


Bij de laatste gaat de ln -s stap die bij machine 1 mis ging dus wel goed, maar loopt dus later weer tegen een probleem aan. Lekkere tool dus, ik heb alles gemaild naar de makers, ik denk dat ik daar maar even op ga wachten, nu al genoeg tijd verknoeid.

Acties:
  • 0 Henk 'm!

  • sam.vimes
  • Registratie: Januari 2007
  • Laatst online: 08-06 08:44
Red devil schreef op dinsdag 17 juli 2012 @ 14:08:
[...]
Bedankt! Zo kon ik het iig goed volgen. Heb het op meerdere machines getest. Op 1 machine knalt de tool er met deze melding uit:

code:
1
2
3
RunCommand=>[ln -s ../data/dna.fna]
Can't exec "ln": Too many levels of symbolic links at //gmes/gm_es.pl line 681.
Error on system: create link for dna file
Dat is voor het eerst dat ik de 1-parametervorm van ln tegenkom (create a link to TARGET in the current directory). Volgens mij wordt de file ../data/dna.fna hier naar zichzelf gelinkt. Het zal wel een programmeerfout zijn waarbij een van de parameters in
code:
1
ln -s TARGET LINK_NAME
expandeert naar een lege string.
bij een ander bij deze:
code:
1
2
3
RunCommand=>[cat dna.fa_* > tmp.seq]
sh: /bin/cat: Argument list too long
Error on system: combine all training data
Het aanroepen van externe commando's voor zulke triviale opdrachten (in plaats van ze door een native Perl subroutine te laten uitvoeren) is misschien wel een paar regels minder code, maar maakt het programma zoals je ziet een veel minder robuust en portable.
Ik durf te wedden dat de file tmp.seq overbodig is, omdat hij in een volgende stap door het Perl-programma ingelezen gaat worden...
Bij de laatste gaat de ln -s stap die bij machine 1 mis ging dus wel goed, maar loopt dus later weer tegen een probleem aan. Lekkere tool dus, ik heb alles gemaild naar de makers, ik denk dat ik daar maar even op ga wachten, nu al genoeg tijd verknoeid.
De gebruikte constructies zijn voor mij symptomatisch voor een programmeur die niet het Perl-idioom kent, maar een shell-script in Perl heeft geschreven.
Pagina: 1