Willkommen im #Neuland
Login wie bei quake.ingame.de zuvor, die Passwörter aus der alten Datenbank wurden aber gelöscht - einmal hier neu anfordern.
Wer seine E-Mail-Adresse nicht mehr hat oder kennt, bitte eine Nachricht mit Infos schicken o. im Discord melden.

PQ Discord Server: #planetquake                                                                                                                                         Spenden? Hier entlang!

grep funktioniert über direkte Shell-Ausführung, aber nicht im Cronjob

GNU/Linux-, *BSD- und Fricklerforum
Antworten
rund
Accuracy
Accuracy
Beiträge: 8184
Registriert: Aug 2000

grep funktioniert über direkte Shell-Ausführung, aber nicht im Cronjob

Beitrag von rund »

E
R
S
T
M
A
L

D
A
S

A
D

Hi,
ich brauch mal Anregungen, was das noch sein könnte.
In einem Perl-Script führe ich einen grep aus. Der grep funktioniert, wenn ich ihn direkt in der Shell (/bin/bash und /bin/sh) ausführe oder wenn ich das Perl-Script direkt starte, aber nicht, wenn das Perl-Script über einen Cronjob gestartet wird.

Ein anderer grep im selben Perl-Script funktioniert problemlos, der nicht funktionierende grep läuft ca. 15 Minuten (normal wären es etwas mehr), bringt aber kein Ergebnis zurück.

Folgender Perl-Code:

Code: Alles auswählen

my $grep_ios="cd ".$wm_conf_ce." && /bin/egrep \"^interface [a-Z]+ *[0-9\\/]+\" -A 20 -r * 2>&1 | /bin/egrep \"(:interface |- description|- (ip )?vrf|- ip(v6)? address|- +standby( +.*)? ipv6)\" 2>&1";
my @cmd_output=`$grep_ios`;
Aufgelöst:

Code: Alles auswählen

cd /home/ipc/conf-ce-current/ && /bin/egrep "^interface [a-Z]+ *[0-9\/]+" -A 20 -r * 2>&1 | /bin/egrep "(:interface |- description|- (ip )?vrf|- ip(v6)? address|- +standby( +.*)? ipv6)" 2>&1

Der funktionierende grep sieht nicht viel anders aus:

Code: Alles auswählen

my $grep_ios_wan="cd ".$wm_conf_ce." && /bin/egrep \"^ *(router bgp |address-family ipv[46] vrf |neighbor .* remote-as 20570)\" -r * 2>&1";
my @cmd_output=`$grep_ios_wan`;
Aufgelöst:

Code: Alles auswählen

cd /home/ipc/conf-ce-current/ && /bin/egrep "^ *(router bgp |address-family ipv[46] vrf |neighbor .* remote-as 20570)" -r * 2>&1


Cron-Eintrag:

Code: Alles auswählen

30 1,6,12 * * * /usr/bin/perl /home/ipc/CoPS/bin/agent_ip.pl >> /home/ipc/CoPS/logs/cronjob_ip 2>&1
"SHELL=/bin/bash" hab ich mal testweise bei Cron eingetragen, bringt aber keine Änderung.

Ideen?
inops
Mynx
Mynx
Beiträge: 51
Registriert: Sep 2004

Beitrag von inops »

Vielleicht fehlt Cron die Berechtigung für die Verzeichnisse?
Die Scripte werden ja vermutlich mit der Berechtigung des Cron-Jobs ausgeführt?
Keine Ahnung unter welchem Benutzer die Cron-Jobs ausgeführt werden...
wildtollwut
Biker
Biker
Beiträge: 1031
Registriert: Mär 2003

Beitrag von wildtollwut »

Zunächst mal: wieso 'cd'? Du kannst grep auch ein Verzeichnis angeben, in dem gesucht werden soll. Warum leitest du stderr auf stdout um? Willst du in deinem verketteten grep auch mögliche Fehler durchsuchen?

Die Pipe ist m.E. nicht nötig - wenn du einfach zwei Suchmuster hast, kannst du dasselbe auch per -e 'pattern1' -e 'pattern2' erreichen.

Versuche als nächstes deine Befehle als root ("su -") auszuführen, System-Cronjobs laufen auch als root, und die Ausgabe anzuschauen.
Gründungsmitglied und Vorstandsvorsitzender der ersten offziellen PQ.de-Exorzisten-(CS-Austreiber)-Offensive.
Bild
rund
Accuracy
Accuracy
Beiträge: 8184
Registriert: Aug 2000

Beitrag von rund »

wildtollwut hat geschrieben:Zunächst mal: wieso 'cd'? Du kannst grep auch ein Verzeichnis angeben, in dem gesucht werden soll.
Ja, könnte man wohl auch.. Gewohnheit.
wildtollwut hat geschrieben:Warum leitest du stderr auf stdout um? Willst du in deinem verketteten grep auch mögliche Fehler durchsuchen?
Vermutlich kann ich stderr auch auf eine Logfile umleiten? Ich vermute dann mit "2>/home/user/log.txt" ? Hab ich noch nicht probiert, ich wollte die Fehler nur erstmal irgendwo abgefangen bekommen.
wildtollwut hat geschrieben:Die Pipe ist m.E. nicht nötig - wenn du einfach zwei Suchmuster hast, kannst du dasselbe auch per -e 'pattern1' -e 'pattern2' erreichen.
Wenn das zweite Suchmuster nur auf das Ergebnis des ersten Musters Zugriff hat funktioniert das wohl auch, hab's nicht getestet, würde aber vermuten, dass hier beide Suchmuster auf den gesamten Dateiinhalt angewendet werden.

@Topic:
Hab nun endlich herausgefunden, was das Problem ist!!
Ich weiß nicht warum, aber aus irgendeinem Grund funktioniert unter Cron der Pattern, bzw. die Zeichenklasse "[a-Z]" nicht. Sobald ich stattdessen [a-zA-Z] angebe geht es.
... man muss nicht alles verstehen.
fame
Combo
Combo
Beiträge: 13800
Registriert: Okt 2000
Wohnort: LK Rosenheim

Beitrag von fame »

[a-Z] Ist das ein spezieller GNU Regex ausdruck? Bei Perl Regex gibt's das nicht, oder?!

Würde an deiner Steller immer [a-zA-Z] nutzen, ist übersichtlicher und sollte überall funktionieren.
RDX hat geschrieben:Halt einfach mal deine verfickte Fresse du Spast, OK? Wenn es dir Spass macht nach dem Essen einen grummelnden Magen zu haben (noch dazu nachdem du etwas gegessen hast was dir absolut nicht schmeckt) um dann irgendwann furzend auf's Klo zu spazieren und richtig ordentlichen Weichschiss zu hinterlassen wonach du deinen Arsch etwa 12 mal abwischen musst, dann viel Spass damit.
Wenn nicht, dann halt's Maul und lass mich in Ruhe.
rund
Accuracy
Accuracy
Beiträge: 8184
Registriert: Aug 2000

Beitrag von rund »

Doch, den gibt es auch in Perl (hab Regex erst über Perl gelernt).
Aber selbst wenn es ein Spezialausdruck wäre, so sollte doch zumindest Cron das gleiche können wie die normale User-Shell. Aber was solls... die Dinge an denen man so lange rumprobieren muss merkt man sich für die Zukunft.
fame
Combo
Combo
Beiträge: 13800
Registriert: Okt 2000
Wohnort: LK Rosenheim

Beitrag von fame »

Natürlich unterstützt grep dieselben Optionen etc., egal ob du es in einem Skript direkt aufrufst oder durch Cron. Man müsste sich halt einmal genau angucken was da schief läuft.

Aber ehrlich gesagt will ich ungerne mehr als 30 Sekunden damit verschwenden über die Probleme eines Verrückten nachzudenken :( Frag doch mal deine Ma ob sie dir beim debuggen hilft, die scheint ein echter Geek zu sein.
RDX hat geschrieben:Halt einfach mal deine verfickte Fresse du Spast, OK? Wenn es dir Spass macht nach dem Essen einen grummelnden Magen zu haben (noch dazu nachdem du etwas gegessen hast was dir absolut nicht schmeckt) um dann irgendwann furzend auf's Klo zu spazieren und richtig ordentlichen Weichschiss zu hinterlassen wonach du deinen Arsch etwa 12 mal abwischen musst, dann viel Spass damit.
Wenn nicht, dann halt's Maul und lass mich in Ruhe.
rund
Accuracy
Accuracy
Beiträge: 8184
Registriert: Aug 2000

Beitrag von rund »

fame hat geschrieben:Aber ehrlich gesagt will ich ungerne mehr als 30 Sekunden damit verschwenden über die Probleme nachzudenken :(
Das verlange ich auch nicht. Wäre ganz interessant zu wissen, aber das Problem ist gelöst, das ist die Hauptsache.
factorx
Sorlag
Sorlag
Beiträge: 3776
Registriert: Nov 2000
Wohnort: Hannover

Beitrag von factorx »

Häufigster Fehler bei cronjobs die in der Shell zwar super, nicht aber im Cronjob funktionieren, sind wohl fehlende/falsche Umgebungsvariablen.
Bild
Antworten