PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : crontab



Mehlwurm
27-04-2006, 08:35
hi *

habe ein script um eine datenbank zu sichern und will es per cron einmal am tag laufen lassen.
wenn ich es manuell starte bekomm ich ein schönes tar.gz raus, aber wenn ich das programm durch den cron starte ... wird die datei erzeugt, ist aber nur 78k gross ... (entpackt und enttart ist es dann LEER) ... die anderen save-files sind ca 5000k
ich arbeite auf einem true64, und hab keinen schimmer woran das liegen kann.

bitte helft mir

ninguno
27-04-2006, 08:57
was steht im log?

michael.sprick
27-04-2006, 09:44
nicht vergessen, dass crond eine eigene Umgebung hat -> also auch eine eigene $PATH.
Im Zweifelsfall einfach den absoluten Pfad zu mysqladmin (oder was Du auch immer benutzt) angeben...

Mehlwurm
02-05-2006, 08:01
ich hab es hinbekommen .. es war zum einen die path angaben .. und zum anderen hatte ich als root die cron datei erstellt und es muss bin gehören ..
meine unwissenheit tut mir leid ...
aber ninguno kannst du mir bitte noch sagen, wo der log steht? ...

thx

peschmae
02-05-2006, 14:54
Entweder schreibt das Script direkt in eine Logdatei, oder sonst wird dir der Stdout des Scripts von cron gemailt. Vorausgesetzt natürlich du hast einen (funktionierenden) MTA.

MfG Peschmä

jeebee
02-05-2006, 19:10
und wenn kein MTA läuft, wird stdout in die Datei dead.letter des Users, dem der Cron-Auftrag gehört, geschrieben.

Mehlwurm
10-05-2006, 10:55
verdammt.
ich dachte das script läuft, und es erstellt auch die datei .. aber diese ist wieder nur 78k gross ...*nerv
die pfade hatte ich korrigiert .. log ?? ...mta läuft

script:

mgodms51> more ~/bin/2_secure_script
#!/bin/ksh

##########################################
## ##
## Scirpt zum Sichern von DB's ##
## ##
##########################################
#
# In der Datei "liste" sind die zu sichernden DB's anzugeben
#

cd /usr/users/dms/bin

dir=`pwd`
for db in `cat liste`
do
tar=""$db"_by_cron_`date +%d%h%y_%H%M`.tar"
rm -rf db_tmp_dir
mkdir db_tmp_dir
cd db_tmp_dir
/usr/users/dms/bin/copydb -c $db
sql -f8F79.38 $db < copy.out
sed "s+`pwd`+.+" < copy.in > new_copy.in
mv new_copy.in copy.in
tar -cf $tar *
chmod 777 $tar
gzip -9 $tar
mv "$tar".gz /usr/users/dms/backup/BY_CRON
cd ..
rm -rf db_tmp_dir
done
exit

der Mailinhalt


mgodms51> mail
From root Wed May 10 09:23:01 2006
Received: by mgodms51 id k4A9N1L48558; Wed, 10 May 2006 09:23:01 GMT
Date: Wed, 10 May 2006 09:23:01 GMT
From: system PRIVILEGED account <root@mgodms51>
Message-Id: <200605100923.k4A9N1L48558@mgodms51>

/usr/users/dms/bin/2_secure_script[27]: /usr/users/dms/bin/copydb: not found
/usr/users/dms/bin/2_secure_script[28]: copy.out: cannot open
/usr/users/dms/bin/2_secure_script[29]: copy.in: cannot open
mv: rename new_copy.in to copy.in: No such file or directory
tar: * : No such file or directory
/usr/users/dms/bin/2_secure_script[27]: /usr/users/dms/bin/copydb: not found
/usr/users/dms/bin/2_secure_script[28]: copy.out: cannot open
/usr/users/dms/bin/2_secure_script[29]: copy.in: cannot open
mv: rename new_copy.in to copy.in: No such file or directory
tar: * : No such file or directory


*************************************************
Cron: The previous message is the standard output
and standard error of the following crontab command:

/usr/users/dms/bin/2_secure_script 1>/dev/null

? d
mgodms51>


bitte helft mir!

michael.sprick
10-05-2006, 11:08
Existiert diese Datei:

/usr/users/dms/bin/copydb

und ist sie ausführbar für den User, unter dem Cronjob läuft?

Mehlwurm
10-05-2006, 11:49
und ist sie ausführbar für den User, unter dem Cronjob läuft?

ja,ja,ja ... und ich weiss nicht weiter :-(

michael.sprick
18-05-2006, 10:00
setz doch mal an den Anfang des Skriptes ein "set -x" und poste mal die komplette Ausgabe, die dann beim Aufruf durch Crond produziert wird.
Unten unter das Skript könntest Du vorsichtshalber noch ein "env" schreiben... so kann man sich die aktuelle Umgebung ansehen.

Ist /usr/users/dms/bin/copydb auch ein Skript? Wenn ja, poste dieses bitte auch mal. Evtl. liegt ja auch da das Problem...

Gruß, michael :)

Mehlwurm
18-05-2006, 12:54
hab also nochmal mein script:

#!/bin/ksh

##########################################
## ##
## Scirpt zum Sichern von DB's ##
## ##
##########################################
## ##
## Autor: M. Wilke ##
## Datum: 26.04.2006 ##
## Version: 1.2 ##
## ##
##########################################
#
# In der Datei "liste" sind die zu sichernden DB's anzugeben
#

set -x

cd /usr/users/dms/bin

dir=`pwd`
for db in `cat liste`
do
tar=""$db"_by_cron_`date +%d%h%y_%H%M`.tar"
rm -rf db_tmp_dir
mkdir db_tmp_dir
cd db_tmp_dir
/usr/users/dms/bin/copydb -c $db
sql -f8F79.38 $db < /usr/users/dms/bin/db_tmp_dir/copy.out
sed "s+`pwd`+.+" < /usr/users/dms/bin/db_tmp_dir/copy.in > /usr/users/dms/bin/db_tmp_dir/new_copy.in
mv /usr/users/dms/bin/db_tmp_dir/new_copy.in /usr/users/dms/bin/db_tmp_dir/copy.in
tar -cf $tar *
chmod 777 $tar
gzip -9 $tar
mv "$tar".gz /usr/users/dms/backup/BY_CRON
cd ..
rm -rf db_tmp_dir
done
env
exit

die fehlermeldung per mail:

mgodms51> mail
From root Thu May 18 10:41:00 2006
Received: by mgodms51 id k4IAf0e101791; Thu, 18 May 2006 10:41:00 GMT
Date: Thu, 18 May 2006 10:41:00 GMT
From: system PRIVILEGED account <root@mgodms51>
Message-Id: <200605181041.k4IAf0e101791@mgodms51>

+ cd /usr/users/dms/bin
+ + pwd
dir=/usr/users/dms/bin
+ cat liste
+ + date +%d%h%y_%H%M
tar=krhlive_by_cron_18May06_1040.tar
+ rm -rf db_tmp_dir
+ mkdir db_tmp_dir
+ cd db_tmp_dir
+ /usr/users/dms/bin/copydb -c krhlive
+ sql -f8F79.38 krhlive
+ /usr/users/dms/bin/2_secure_script[29]: /usr/users/dms/bin/db_tmp_dir/copy.out: cannot open
+ pwd
+ sed s+/usr/users/dms/bin/db_tmp_dir+.+
+ /usr/users/dms/bin/2_secure_script[30]: /usr/users/dms/bin/db_tmp_dir/copy.in: cannot open
+ mv /usr/users/dms/bin/db_tmp_dir/new_copy.in /usr/users/dms/bin/db_tmp_dir/copy.in
mv: rename /usr/users/dms/bin/db_tmp_dir/new_copy.in to /usr/users/dms/bin/db_tmp_dir/copy.in: No such file or directory
+ tar -cf krhlive_by_cron_18May06_1040.tar *
tar: * : No such file or directory
+ chmod 777 krhlive_by_cron_18May06_1040.tar
+ gzip -9 krhlive_by_cron_18May06_1040.tar
+ mv krhlive_by_cron_18May06_1040.tar.gz /usr/users/dms/backup/BY_CRON
+ cd ..
+ rm -rf db_tmp_dir
+ + date +%d%h%y_%H%M
tar=trainer_by_cron_18May06_1040.tar
+ rm -rf db_tmp_dir
+ mkdir db_tmp_dir
+ cd db_tmp_dir
+ /usr/users/dms/bin/copydb -c trainer
+ sql -f8F79.38 trainer
+ /usr/users/dms/bin/2_secure_script[29]: /usr/users/dms/bin/db_tmp_dir/copy.out: cannot open
+ pwd
+ sed s+/usr/users/dms/bin/db_tmp_dir+.+
+ /usr/users/dms/bin/2_secure_script[30]: /usr/users/dms/bin/db_tmp_dir/copy.in: cannot open
+ mv /usr/users/dms/bin/db_tmp_dir/new_copy.in /usr/users/dms/bin/db_tmp_dir/copy.in
mv: rename /usr/users/dms/bin/db_tmp_dir/new_copy.in to /usr/users/dms/bin/db_tmp_dir/copy.in: No such file or directory
+ tar -cf trainer_by_cron_18May06_1040.tar *
tar: * : No such file or directory
+ chmod 777 trainer_by_cron_18May06_1040.tar
+ gzip -9 trainer_by_cron_18May06_1040.tar
+ mv trainer_by_cron_18May06_1040.tar.gz /usr/users/dms/backup/BY_CRON
+ cd ..
+ rm -rf db_tmp_dir
+ env
PATH=:/usr/bin
LOGNAME=dms
USER=dms
SHELL=/usr/bin/sh
HOME=/usr/users/dms
PWD=/usr/users/dms/bin
+ exit


*************************************************
Cron: The previous message is the standard output
and standard error of the following crontab command:

/usr/users/dms/bin/2_secure_script

?


copydb ist :

mgodms51> file copydb
copydb: COFF format alpha dynamically linked, demand paged executable or object module not stripped - version 3.11-10

eine datei von eine firma und es ist zu erwarten, dass es funktioniert

mein script funktioniert ja auch, wenn ich es aufrufe ... nur per cron halt nicht
*wein

Romanday
18-05-2006, 16:28
hab also nochmal mein script:
[CODE]
mein script funktioniert ja auch, wenn ich es aufrufe ... nur per cron halt nicht
*wein

Gib mal den Fullpath tar an, dann funktioniert dein Script auch per Cron.

michael.sprick
18-05-2006, 17:26
Daran kann es eigentlich nicht liegen. tar sollte in /usr/bin liegen...dieser Pfad ist ja in $PATH enthalten. Außerdem wird ja ein tarball erstellt... er enthält nur nix. Ich vermute eher, dass die Datei

/usr/users/dms/bin/db_tmp_dir/copy.out garnicht bzw. an falscher Stelle erstellt wird.



+ sql -f8F79.38 krhlive
+ /usr/users/dms/bin/2_secure_script[29]: /usr/users/dms/bin/db_tmp_dir/copy.out: cannot open


Wenn der User "dms" wirklich alle benötigten Rechte auf die ganzen Dateien hat, stellt sich die Frage, was das Skript "2_secure_script" in Zeile 29 tut... bzw. warum es die Datei nicht findet.

Romanday
19-05-2006, 03:41
Daran kann es eigentlich nicht liegen. tar sollte in /usr/bin liegen...dieser Pfad ist ja in $PATH enthalten. Außerdem wird ja ein tarball erstellt... er enthält nur nix. Ich vermute eher, dass die Datei

/usr/users/dms/bin/db_tmp_dir/copy.out garnicht bzw. an falscher Stelle erstellt wird.

[code]


Das meinte ich ja, vielleicht ein wenig unglücklich ausgedrückt.


kleine Anregung:
1.) Hatte vor langer Zeit ein ähnliches Problem mit Cron. Die
Ursachenforschung ist klebrig. Nachdem ich das Script noch 1x
in PHP geschrieben hatte, klappte es sofort. Das ging schneller
als jede Zeile durch zu popeln wo der Fehler liegt.

2.) Du kannst die Namen der DB's auch dynamisch auslesen.
(Dann wird nix vergessen.)

Mehlwurm
19-05-2006, 08:09
1.) Hatte vor langer Zeit ein ähnliches Problem mit Cron. Die
Ursachenforschung ist klebrig. Nachdem ich das Script noch 1x
in PHP geschrieben hatte, klappte es sofort. Das ging schneller
als jede Zeile durch zu popeln wo der Fehler liegt.

2.) Du kannst die Namen der DB's auch dynamisch auslesen.
(Dann wird nix vergessen.)

zu eins ... php ist nicht installiert und das wird auch leider nichts ..
zu zwei ... weiss nicht wie, aber das sollte nicht wild sein, da nur einige db´s gesichert werden sollen... und das kann auch varieren

werde nochmal die rechte überprüfen ..
was mir auffällt, wenn der cron das verzeichnis db_tmp_dir erzeugt, wie sind dann die rechte .. ?

werd mal ein chmod 777 auf db_tmp_dir einfügen

Mehlwurm
19-05-2006, 09:11
:) :) :)
das problem:
es wird eine ingres datenbank benutzt, die nur (ausschliesslich) den nutzer dms zulässt!
wird das script durch den cronjob gestarte, dann als user cron, der nicht auf die db zugreifen darf

problematik erkannt, leider noch nicht ganz gebannt, aber jetzt weiss ich woran ich arbeiten kann

THX an alle ... hoffe ihr seid nicht zu sehr genervt ;-)

Romanday
19-05-2006, 10:00
was mir auffällt, wenn der cron das verzeichnis db_tmp_dir erzeugt, wie sind dann die rechte .. ?

werd mal ein chmod 777 auf db_tmp_dir einfügen

Laß doch mal das Verzeichnis stehen (nicht löschen), dann kannst
es dir mit ls -al z. B. anzeigen lassen.

michael.sprick
19-05-2006, 10:16
ähm... dann stimmt aber was mit dem Environment nicht.
Denn laut `env` wird Dein Skript als dms ausgeführt...



PATH=:/usr/bin
LOGNAME=dms
USER=dms
SHELL=/usr/bin/sh
HOME=/usr/users/dms
PWD=/usr/users/dms/bin

Mehlwurm
19-05-2006, 10:32
ähm... dann stimmt aber was mit dem Environment nicht.
Denn laut `env` wird Dein Skript als dms ausgeführt...

shit .

dann hab ich mich wahrscheinlich zu früh gefreut ... hab gerade versucht im script den user zu wechseln, aber das ist auch nicht so ohne ... weil ich noch nicht rausbekommen habe, wie ich an su - dms das passwort verfüttere

aber wenn der fehler nicht da liegt .. bin ich natürlich noch immer aufgeschmissen ..

Mehlwurm
02-06-2006, 09:46
:) :)
in /var/spool/cron/crontabs/root


00 2 * * * su dms -c /usr/users/dms/bin/2_secure_script


das Script:


#!/bin/sh
cd /usr/users/dms/bin

for db in `cat liste`
do
tar=""$db"_by_cron_`date +%d%h%y_%H%M`.tar"
rm -rf db_tmp_dir
mkdir db_tmp_dir
chmod 777 db_tmp_dir
cd db_tmp_dir
/usr/users/dms/bin/copydb -c $db
/usr/dbms/ingres/bin/sql -f8F79.38 $db < /usr/users/dms/bin/db_tmp_dir/copy.out
sed "s+`pwd`+.+" < /usr/users/dms/bin/db_tmp_dir/copy.in > /usr/users/dms/bin/db_tmp_dir/new_copy.in
mv /usr/users/dms/bin/db_tmp_dir/new_copy.in /usr/users/dms/bin/db_tmp_dir/copy.in
tar -cf $tar *
chmod 777 $tar
gzip -9 $tar
mv "$tar".gz /usr/users/dms/backup/BY_CRON
cd ..
rm -rf db_tmp_dir
done
exit



funktioniert :D :D :D


THX an alle !