Script geht nur via Console, nicht via Cron

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
mike2006
Beiträge: 10
Registriert: 23.06.2006 03:53:41

Script geht nur via Console, nicht via Cron

Beitrag von mike2006 » 23.06.2006 04:06:23

Hallo,

ich bin noch relativ neu im Linux-Metier. Bisher überwiegend mit Suse "gelernt", jetzt versuche ich gerade Debian (3.1).

Mein Problem:
ich habe ein Script geschrieben, um die Systemauslastung grob etwas zu protokollieren.

Code: Alles auswählen

top -b -n 1 > /tmp_process/$(date '+%Y-%m-%d-%H:%M')_process.log
Der Aufruf erfolgt via Console mit sh logging und es funktioniert alles wunderbar.

Rufe ich hingegen das Script via Cronjob auf (sh /tmp_process/logging), dann wird die gewollte Datei zwar angelegt, hat aber Null Bytes.
Da ich bisher die Fehlerausgaben umgeleitet hatte, bemerkte ich nicht, dass ein Fehler ausgegeben wird:

"TERM environment variable not set."

Die Variable ist aber gesetzt, TERM=vt220

Habe Rechte geprüft, die Dokus durchgesehen, aber ich komme leider nicht drauf, was nicht geht, zumal es unter Suse 10.x keine Probleme gegeben hat.

Vielleicht kann mir jemand ein wenig weiterhelfen.
Danke.
Mike

Benutzeravatar
Cloonix
Beiträge: 589
Registriert: 20.11.2004 10:42:24
Wohnort: München
Kontaktdaten:

Beitrag von Cloonix » 23.06.2006 06:55:06

Sollte es nur an der Variable scheitern, dann setze die doch im Skript für den Crontab. Am besten du lagerst das Skript in eine Datei aus und führst es von dort aus.
Auf jeden Fall mal ein "export TERM=vt220" in den Crontab einfügen. Das setzt die Variable, denn im Crontab werden AFAIR die Werte aus Environment nicht alle vernwendet und mann muss sich selbst um die Variablen kümmern.
proud to be 100% M$ free (except X300T)
http://claus.freakempire.de
http://debian.freakempire.de

Benutzeravatar
Cloonix
Beiträge: 589
Registriert: 20.11.2004 10:42:24
Wohnort: München
Kontaktdaten:

Beitrag von Cloonix » 23.06.2006 06:58:45

Abgesehen davon wir das mit $(date +...) im Crontab nicht funktionieren. Also am besten lager die ganze Geschichte in ein Skript aus.
proud to be 100% M$ free (except X300T)
http://claus.freakempire.de
http://debian.freakempire.de

Benutzeravatar
Cloonix
Beiträge: 589
Registriert: 20.11.2004 10:42:24
Wohnort: München
Kontaktdaten:

Beitrag von Cloonix » 23.06.2006 07:06:30

Hehe, und weil ich grad Lust hatte und obwohl ich unter Zeitdruck stehe, habe ich das gerade mal gemacht. So schaut das Skript aus:

Code: Alles auswählen

[minox@distributor] (~/tmp) $ cat test.sh
#!/bin/sh

DATE=$(date '+%Y-%m-%d-%H:%M')
export TERM=vt220
/usr/bin/top -b -n 1 > /home/minox/tmp/$DATE-process.log
Und das Skript habe ich natürlich ausführbar gemacht:

Code: Alles auswählen

chmod u+x test.sh
Und das wird nun im Crontab ausgeführt.
proud to be 100% M$ free (except X300T)
http://claus.freakempire.de
http://debian.freakempire.de

mike2006
Beiträge: 10
Registriert: 23.06.2006 03:53:41

Beitrag von mike2006 » 23.06.2006 16:29:24

Hallo cloonix,

vielen Dank für Deine Antwort und Dein Script.

Vorweg:
ich habe den top> - Befehl natürlich in einem Script gehabt und nur das Script im Crontjob aufgerufen.
Scheinbar sind die Unterschiede zwischen Suse und Debian doch etwas grösser, als ich gedacht habe. Denn unter Suse hat beides funktioniert: Aufruf des Scripts selbst und der Cron, der das Script aufruft.
Bei Debian funktioniert der direkte Aufruf des Scripts, aber nicht der über Cronjob.

Dein Script funktioniert sehr gut, mit einer mir unverständlichen Ausnahme:

..... > /tmp_process/$DATE-process.log:
funktioniert via Direktaufruf und auch über Cron

.... > /tmp_process/$DATE_process.log
erzeugt eine Datei mit richtigem Inhalt, aber der Name ist nur .log

Also: ein Unterschied zwischen _process.log und -process.log ???
Ist der Underscore in Debian speziell reserviert für irgendwas ? Die Doku sagt dazu leider nichts aus.

Und noch eine Newbie-Frage zum Schluss:
wie / wo realisiere ich, dass der Debian-Server seine Systemzeit automatisch mit einem NTP-Server synchronisiert ?

Merci
Mike

Benutzeravatar
herrchen
Beiträge: 3257
Registriert: 15.08.2005 20:45:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von herrchen » 23.06.2006 17:23:08

mike2006 hat geschrieben: wie / wo realisiere ich, dass der Debian-Server seine Systemzeit automatisch mit einem NTP-Server synchronisiert ?
das paket "ntpdate" bietet eine sehr simple lösung.

herrchen

mike2006
Beiträge: 10
Registriert: 23.06.2006 03:53:41

Beitrag von mike2006 » 23.06.2006 18:21:00

wunderbar, vielen Dank.

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 23.06.2006 19:11:44

mike2006 hat geschrieben: ..... > /tmp_process/$DATE-process.log:
funktioniert via Direktaufruf und auch über Cron

.... > /tmp_process/$DATE_process.log
erzeugt eine Datei mit richtigem Inhalt, aber der Name ist nur .log

Also: ein Unterschied zwischen _process.log und -process.log ???
Ist der Underscore in Debian speziell reserviert für irgendwas ? Die Doku sagt dazu leider nichts aus.
Naja, das ist ganz einfach: der Underscore ist ein zulaessiges Zeichen fuer eine Shell-Variable. Die Shell sieht hier nicht $DATE sondern $DATE_process, wo natuerlich nix drinsteht. Wenn du das korrekt haben willst, dann sollte das so gehen:

Code: Alles auswählen

.... > /tmp_process/${DATE}_process.log
Und noch eine Newbie-Frage zum Schluss:
wie / wo realisiere ich, dass der Debian-Server seine Systemzeit automatisch mit einem NTP-Server synchronisiert ?
Du koenntest dir z.B. chrony installieren. Oder halt in aptitude mal nach ntp suchen. ntpd wuerd ich nicht nehmen, der will ne permanente Verbindung zu ntp-Servern und kann selber auch ntp-Server spielen. ntpdate koennte auch ok sein fuer deine Zwecke denke ich.

mike2006
Beiträge: 10
Registriert: 23.06.2006 03:53:41

Beitrag von mike2006 » 23.06.2006 20:33:40

vielen Dank.
Ich hoffe, es entsteht nicht der Eindruck, ich würde nicht versuchen, hinter das geheimnis von "Debian" zu kommen.
Habe die letzten 2 Stunden ein 249seitiges PDF-Manual zu Debian gelesen.
Bei Suse war ich immerhin schon soweit, dass ich sogar Applikationen installieren konnte, diese konfigurieren und auch schon einige recht gute Shellscripte verfassen konnte (mit Doku daneben und manchmal probieren, aber es ging).
Und nun bei Debian ist vieles sooooo ganz anders.

Vielleicht kann mir noch jemand einen Tipp zu MAIL geben.
Unter Suse konnte mit mail -a <Dateiname> ein Attachment gesendet werden.
Diese Möglichkeit - weiss ich jetzt nach 2 Stunden - gibt es bei Debian nicht.
Wie bringe ich bei Debian mail dazu, ein Attachment zu senden ?

Hat jemand einen Link für eine Doku nach dem Motto "ich kann schon ein wenig Suse und benutze nun Debian - Basics für Wechsel" ?
Habe auf den offiziellen Seiten nichts gefunden und via Google leider nur Seiten, auf denen sehr tief über Unterschiede bei Kernel/Paketinstallation etc. gesprochen wird.

Vielen Dank.
Mike

Benutzeravatar
Raoul
Beiträge: 1435
Registriert: 20.05.2003 00:16:35
Lizenz eigener Beiträge: neue BSD Lizenz
Kontaktdaten:

Beitrag von Raoul » 23.06.2006 21:16:34

mike2006 hat geschrieben:Wie bringe ich bei Debian mail dazu, ein Attachment zu senden ?

Code: Alles auswählen

$ cat body.txt > | mutt -a <attachment.log> -s Logfile root@localhost
Schickt eine Nachricht mit einem vorgefertigten Text (body.txt) und dem Betreff "Logfile" an root. Anhängt wird die Datei attachment.log. Geht natürlich nur, wenn mutt installiert ist.

Ansonsten kann man auch uuencode nehmen:

Code: Alles auswählen

$ uuencode foo.bmp /dev/stdout | mail -s Bitmap root@localhost
Schickt foo.bmp als Attachment an root.

Raoul

Code: Alles auswählen

grep -ir fuck /usr/src/linux

mike2006
Beiträge: 10
Registriert: 23.06.2006 03:53:41

Beitrag von mike2006 » 23.06.2006 23:23:21

Hallo Raoul,

danke für die Antwort.
mutt ist leider noch nicht installiert, sollte ich vielleicht nachholen.

Das Beispiel mit uuencode erzeugt eine attached Datei mit Namen _dev_stdout.dat, diese beinhaltet leider nichts Verwertbares.

Das Script soll täglich die logfiles (gepackt in einer Datei logfiles-<datum>.tar.gz) versenden.
Versenden geht - aber der Name des Attachments geht verloren und der Inhalt bei .gz scheinbar auch, jedenfalls ist ein Entpacken nicht mehr möglich.

Code: Alles auswählen

uuencode Archiv-2006-06-23.tar.gz  /dev/stdout | mail -s "Logfiles Server 1" admin@domain.de
sendet eine Mail an admin@domain.de und hängt eine Datei _dev_stdout.dat an, die nichts mehr mit .gz gemeinsam hat.

Der Versuch

Code: Alles auswählen

uuencode | gzip -9 Archiv-2006-06-23.tar.gz | mail -s "Betreff" admin@domain.de
funktioniert gar nicht.
/edit
heisst: *.gz wird erstellt, aber keine Mail verschickt, keine Fehlermeldung
/edit

Hmm...

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 24.06.2006 00:52:22

Der Befehl mail unterstuetzt soweit ich weiss keine Attachments. Entweder du machst das wie schon gesagt wurd mit mutt oder schaust dir mailx oder elm an. Ich glaube, damit geht das dann auch.
Zu der anderen Sache:

Code: Alles auswählen

uuencode Archiv-2006-06-23.tar.gz | mail -s "Logfiles Server 1" admin@domain.de
sollte reichen. Das /dev/stdout ist meiner Meinung nicht noetig. So wie hier gesagt stehts auch in der manpage zu uuencode.

mike2006
Beiträge: 10
Registriert: 23.06.2006 03:53:41

Beitrag von mike2006 » 24.06.2006 05:36:47

@nepos

geht leider nicht. Ohne /dev/stdout schickt er eine 0-Byte-Datei. Mit /dev/stdout schickt er das schon beschriebene _dev_stdout.dat, dass trotz umbenennens in den korrekten Namen kein Archiv ist.

Uff, ist das schwer.
Aber irgendwas muss es geben, denn die schon vorhandene Funktion, error-logs des Servers zuzusenden, funktioniert ja auch prima.
Der Prozess/Script muss ja auch irgendeine Mail-Funktion benutzen, die das kann.
Und mutt ist definittiv genauso wie elm nicht installiert. Wobei ich nicht sicher bin, dass ich die Installation schon schaffen, die Config-Files dazu sind schon nicht "übel".
Aber ich denke, es wird mir nichts anderes übrig bleiben.

Mailx ist das gleiche wie mail.

mike2006
Beiträge: 10
Registriert: 23.06.2006 03:53:41

Beitrag von mike2006 » 24.06.2006 05:53:47

... der Verzweiflung nahe und noch ein wenig probiert:

Code: Alles auswählen

uuencode Logfiles.tar.gz Logfile-Sent.tar.gz | mail -s "Betreff" admin@domain.de
schickt eine mail mit dem Attachment Logfile-Sent.tar.gz, das ein perfektes Archiv ist und wieder entpackt werden kann.
Es funktioniert sogar, wenn die beiden Dateinamen identisch sind.

Ha - Freude - Problem gelöst.

Vielen Dank an alle, dass ihr euch die Zeit genommen habt.
Ich hoffe, ich kann mich mit der nächsten "dummen" Frage auch wieder hier melden.

Schönes Wochenende.
Mike

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 24.06.2006 14:30:56

Ah ok, hatte da die manpage bisschen anders verstanden. Aber wenns nu so klappt, super :)
Btw, wenn du mit mutt ned mehr machen willst, installieren is easy:

Code: Alles auswählen

aptitude install mutt
und das wars eigentlich schon.

mike2006
Beiträge: 10
Registriert: 23.06.2006 03:53:41

Beitrag von mike2006 » 24.06.2006 16:09:42

ich installiere es mal, habe ein Vollbackup gemacht, wenns gar nicht klappt, spiele ich das einfach wieder drauf.

Antworten