ubuntuusers.de

Log files für Perl/Bash Script erzeugen zur Fehlersuche

Status: Ungelöst | Ubuntu-Version: Ubuntu 12.04 (Precise Pangolin)
Antworten |

Ubuntuathome

Anmeldungsdatum:
29. September 2011

Beiträge: 66

Hallo

ich habe ein Bash-Script geschrieben, um eine Email zu versenden. Dies wird in einer übergeordneten SW aufgerufen in einem Perl-Script (user hap). Das Perl-Script selber bekommt immer Daten und wenn das Argument 1 ist, soll die email versand werden:

1
2
3
4
5
6
#!/usr/bin/perl -w
...
if ($ARGV[0] == 1 { 
system("bash sendmail");
}
...

Das Bash-Script sendmail.sh ist nur der Einzeiler:

1
2
#!/bin/bash
mailx -s "Alarm" email@googlemail.com < /home/hap/Alarm.txt > /home/hap/file 

Ausführen von ./sendmail.sh im Terminal mit dem user hap oder anderen klappt wunderbar.

→ Ausführen von anderen einfachen Scripts in der IF Schleife klappt auch, nur mein Bash-Script zum Emaillen will er nicht ausführen! Evtl. ein Problem mit den Rechten? → Wie kann ich hier in LOG files sehen was falsch läuft? Hatte schon mal versucht den output in file zu schreiben aber bleibt leer.

1
-rwxr-xr-x 1 hap  hap    94 Sep 30 14:25 sendmail.sh

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

Wohnort: Göttingen

Also mit der Fehlerausgabe kann ich Dir nicht helfen, aber probier es mal mit vollständigen Pfaden:

system("/bin/bash <Pfad/zum/Skript>/sendmail");

Und in dem sh-Skript bin ich mir dann auch nicht sicher, ob er da den PATH gesetzt hat, also auch dort vielleicht lieber /usr/bin/mailx nehmen...

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

Ubuntuathome schrieb:

1
2
3
4
5
6
#!/usr/bin/perl -w
...
if ($ARGV[0] == 1 { 
system("bash sendmail");
}
...

Runde Klammer zu fehlt. If (rundeKlammerZu.fehlt) Crash.

Ubuntuathome

(Themenstarter)

Anmeldungsdatum:
29. September 2011

Beiträge: 66

Hallo

vielen Dank erstmal!

1) Also das mit der Klammer war dann wohl mein kleine Tochter (1 Jahr) als Sie rumgehämmert hat ☺ Aber danke für die Prüfung!

2) Bzgl. der direkten Verzeichnisse habe ich es jetzt so versucht aber leider kein Erfolg! Die Datei file wird erzeugt aber ohne Inhalt. Die Datei file1 garnicht...

1
2
3
if ($ARGV[0] == 1) { 
system("/bin/bash /opt/hap/var/scripts/sendmail >/home/hap/file");
}
1
2
#!/bin/bash
/usr/bin/mailx -s "Alarm an" email@googlemail.com < /home/hap/Alarm.txt > /home/hap/file1

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

Blöde Frage, aber: Wie heißt dein Skript? sendmail oder sendmail.sh?

Du rufst sendmail auf, aber hier gibt es ja eine Erweiterung:

Ubuntuathome schrieb:

1
-rwxr-xr-x 1 hap  hap    94 Sep 30 14:25 sendmail.sh

Ubuntuathome

(Themenstarter)

Anmeldungsdatum:
29. September 2011

Beiträge: 66

sendmail.sh

dachte das .sh muss man weglassen! oder?

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

Nee.

Du musst da schon den korrekten Dateinamen angeben.

Was du meinst, bezieht sich wohl auf das häufige Missverständnis, dass viele Leute explizit den Interpreter angeben:

sh meinskript

Das „meinskript“ ist dabei aber der tatsächliche Dateiname des Skripts – es heißt auf der Platte nicht etwa „meinskript.sh“.

So ein expliziter Aufruf setzt die Shebang des Skriptes aber außer Kraft. In dem verlinkten Wiki-Artikel stehen mehr Details dazu. Die Shebang sollte man nutzen, denn in ihr hat der Autor des Skripts hinterlegt, mit welchem Interpreter das Ding laufen soll – und dieser Mensch wird’s hoffentlich wissen. ☺

Deswegen wäre ein sinnvollerer Aufruf meistens das:

./meinskript

Das „sh“ ist weg – aber mit dem Dateinamen hat das nichts zu tun.

Ubuntuathome

(Themenstarter)

Anmeldungsdatum:
29. September 2011

Beiträge: 66

Oh, besten Dank!

Antworten |