• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[solved] Crontab eines Users funktioniert nicht.

funon

Member
Hallo @ all,
ich habe also mittlerweile jeden Post (sufu) mit cron + user durchgelesen.

Leider ist meine Antwort nicht dabei.
Ich habe folgendes Problem.
user möchte ein script starten, einmal täglich
also
Code:
 crontab -e
33 14 * * * /pfad/von/root/fuell_inhalt_txt

Das skript funktioniert auch einwadfrei von Hand.
Nach dem Cornlauf bekomme ich mails mit folgendem Inhalt:
Code:
Message 23:
From user@server.de  Tue Jun 20 14:33:01 2006
X-Original-To: user
Delivered-To: user@server.de
From: root@server.de (Cron Daemon)
To: user@server.de
Subject: Cron <user@server> /pfad/von/root/fuell_inhalt_txt
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/soft/ita>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=user>
X-Cron-Env: <USER=user>
Date: Tue, 20 Jun 2006 14:33:01 +0200 (CEST)

/pfad/von/user/bin/progname: error while loading shared libraries: libcaccess.so.0: cannot open shared object file: No such file or directory

er sucht also einen Pfad zur librarie das ist mir schon klar nur wie und vorallem wo kann ich für den User den Suchpfad für die Cronjobs setzen?

als user mit
echo $PATH bekomme ich die Verezeichnisse alle gelistet in denen auch die libs stehen, oder kann ich die libs einfach hin und her linken?

thx 4 your time

Dirk[/code]
 

admine

Ultimate Guru
Du könntest doch im Script eine PATH-Variable setzen.
Oder habe ich dich jetzt falsch verstanden :roll:
 
OP
F

funon

Member
ups sorry das habe ich vergessen zu erwähnen.
im Script
Code:
#!/bin/bash
PATH=hundertevonpfaden

/soft/pfad/bin/caccess -schalter | /usr/bin/grep suche | /usr/bin/awk ...

habe ich versucht alle Pfade wie oben zu setzen aber ohne Erfolg.

Die datei und die libs die ausgeführt werden sollen liegen auch nich im Pfad von z.B. /usr/bin und oder /usr/sbin
sondern wirklich alle unter
/soft/pfad/undsoweiter

danke für die schnelle reaktion
 

oc2pus

Ultimate Guru
pfad/von/user/bin/progname: error while loading shared libraries: libcaccess.so.0: cannot open shared object file: No such file or directory

der sucht eine Bibliothek, da nützt dir PATH nichts. Du musst die Umgebungsvariable LD_LIBRARY_PATH setzen oder diese Bibliothek nach /usr/local/lib verschieben damit sie automatisch gefunden wird.

schreib sowas an den Anfang deines Scriptes:
export LD_LIBRARY_PATH=/pfad-zu-lib:$LD_LIBRARY_PATH

Programme werden dagegen über die Umgebungsvariable PATH gefunden!
 
OP
F

funon

Member
würde auch ein link in
/usr/local/lib genügen?
oder wirklich die Datei kopieren?

und was müsste ich alles in die Zeile an Pfaden packen?
Code:
export LD_LIBRARY_PATH=/pfad-zu-lib:$LD_LIBRARY_PATH
ich weiß dass an anderer Stelle für den User dieser LD_LIBRARY_PATH gesetzt wird damit das Programm vernünftig läuft :!:

überschreibe ich mir diesen Pfad dann nicht?
 

oc2pus

Ultimate Guru
funon schrieb:
würde auch ein link in
/usr/local/lib genügen?
oder wirklich die Datei kopieren?

ein link würde auch genügen ;)

beachte meinen Nachtrag von oben: Programme werden über PATH gefunden, d.h. evtl brauchst du beide Variablen in deinem Script!
 

oc2pus

Ultimate Guru
funon schrieb:
Code:
export LD_LIBRARY_PATH=/pfad-zu-lib:$LD_LIBRARY_PATH
ich weiß dass an anderer Stelle für den User dieser LD_LIBRARY_PATH gesetzt wird damit das Programm vernünftig läuft :!:

überschreibe ich mir diesen Pfad dann nicht?
nein, du hängst ja den alten Wert hintendran ... ($LD_LIBRARY_PATH)
 
OP
F

funon

Member
Danke nochmal :)

ich komme nun schon eine lib weiter :-(
folgendes habe ich hinzugefügt
Code:
export LD_LIBRARY_PATH=/soft/pfad/bin:soft/pfad/bin/Inso:$LD_LIBRARY_PATH

nun sucht er eine Lib in /soft/pfad/bin/Inso

das habe ich aber doch im export mit drin, oder muss ich für jeden Pfad sonne zeile erstellen?
 

oc2pus

Ultimate Guru
nein, es reicht eine Zeile.

Die Pfade werden durch ":" getrennt, am Ende $LD_LIBRARY_PATH anhängen (das ist eder alte Wert)
 
OP
F

funon

Member
Also denn funzt da was entscheidendes nicht?
ich bekommen bei
tail -f /var/log/messages nur folgenden Eintrag
Code:
Jun 21 15:35:01 server /usr/sbin/cron[7097]: (server) CMD (/soft/pfad/tools/fuell_inhalt_txt)

und in der anschließenden Mail steht dann folgendes
Code:
From user@server.de  Wed Jun 21 15:30:02 2006
X-Original-To: user
Delivered-To: user@server.de
From: root@server.de (Cron Daemon)
To: user@server.de
Subject: Cron <user@server> /soft/pfad/tools/fuell_inhalt_txt
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/soft/pfad>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=user>
X-Cron-Env: <USER=user>
Date: Wed, 21 Jun 2006 15:30:01 +0200 (CEST)

/soft/pfad/bin/caccess: error while loading shared libraries: libsc_da.so: cannot open shared object file: No such file or directory

er legt eine Datei an aus dem Script, diese ist aber leer.
Wenn ich das script von Hand als user starte wird diese Datei korrekt gefüllt.
Kann ich wohl einfach den PATH als LD_LIBRARY_PATH angeben?
Also die Pfade daraus?
 

oc2pus

Ultimate Guru
poste mal dein Script ;)
der cron läuft doch schon richtig ... alles andere ist in dem Script zu regeln.
 
OP
F

funon

Member
okay here it is

Code:
#!/bin/bash

PATH=/soft/ita/bin/Brw/bin:/soft/ita/bin/jre/bin:/soft/ita/bat:schnipp:
export LD_LIBRARY_PATH=/soft/ita/bin:soft/ita/bin/Inso:$LD_LIBRARY_PATH

/soft/ita/bin/caccess -c c -u 1 | /usr/bin/grep UDO | /usr/bin/awk '{print $4}' > /soft/ita/tools/inhalt_fuell.txt
 

oc2pus

Ultimate Guru
Code:
export LD_LIBRARY_PATH=/soft/ita/bin:soft/ita/bin/Inso:$LD_LIBRARY_PATH

da fehlt ein "/" in der zweiten Path Angabe ;)

soft/ita/bin/Inso ==> /soft/ita/bin/Inso
 
OP
F

funon

Member
Adlerauge :)

Seid alle bedankt :)
Ich habe noch zwei weitere Pfade in die LD_SCHLANGE aufgenommen und nun habe ich auch inhalt in meiner Datei :!:
 

oc2pus

Ultimate Guru
funon schrieb:
Adlerauge :)

Seid alle bedankt :)
Ich habe noch zwei weitere Pfade in die LD_SCHLANGE aufgenommen und nun habe ich auch inhalt in meiner Datei :!:
wenn du dir diese LD_LIBRARY_PATH Sache sparen willst, könntest du das auch SYSTEMWEIT in der /etc//etc/ld.so.conf erledigen

oder

eine Datei myConf.conf im Verzeichnis /etc/ld.so.conf.d erstellen
diese enthält dann die Pfade die du bei LD_LIBRARY_PATH eingetragen hast.
 
OP
F

funon

Member
Also verstehe ich dich richtig?

es gibt eine Datei

Code:
/etc/ld.so.conf

in die kann man Systemweit und benutzerunabhängig Pfade eintragen, die dann für alle librarys gültig sind?

Ich brauche dann keine LD_LIBxxx angaben mehr in den Scripten machen?
 

oc2pus

Ultimate Guru
funon schrieb:
Also verstehe ich dich richtig?

es gibt eine Datei

Code:
/etc/ld.so.conf

in die kann man Systemweit und benutzerunabhängig Pfade eintragen, die dann für alle librarys gültig sind?

Ich brauche dann keine LD_LIBxxx angaben mehr in den Scripten machen?
yepp, aber nutze besser einen eigenen Eintrag in dem Verzeichnis /etc/ld.so.conf.d, da die /etc/ld.so.conf ggfls bei einem Update überschrieben wird.

Alle *.conf Dateien in dem Verzeichnis /etc/ld.so.conf.d werden zusätzlich includiert.

Die Änderungen werden mit /sbin/ldconfig aktiviert.

ABer wie gesagt, das gilt dann Systemweit und ist User-UNABHÄNGIG. It's your choice ;)
 
OP
F

funon

Member
Also das teste ich doch mal auf meiner bastelbüchse :)
Die muss ich eh leider wieder auf windowsen :-(

Besten dank erstmal für die Hilfe :)
 
Oben