Antworten auf deine Fragen:
Neues Thema erstellen

Perl Script per Cronjob starten bei 1und1

strichcode

Nicht mehr ganz neu hier

Hallo, ich brauche wieder Eure Hilfe:

Ich habe ein perlscript auf dem server liegen, welches mir die Datenbank sichert und als Mail zuschickt.
Nun möchte ich per Cronjob (bei einsundeins) das Script jede nacht um 5.30 Uhr starten.

Ich scheitere an der Eingabe im Putty-Editor:
mailto=meineemailadresse@hier.de
30 5 * * * /kunden/homepages/XX/XXXXXXXXXXX/htdocs/backup.pl

Ergibt: -bash: 30: command not found

Gebe ich die Adresse meines Scriptes im Browser direkt ein, funktioniert es.
Meine Anrufe bei 1und1 brachten nicht das gewünschte Ergebnis, sie haben diesen Support nicht vorgesehen.
Googlen brachte mich auch nicht weiter, ich übersehe was, oder gebe nicht die richtigen Zauberwörter ein.

Könnt Ihr mir weiterhelfen?

Hier das Script:
#! /usr/bin/perl -w
use CGI::Carp qw(fatalsToBrowser);
use CGI;
use DBI;
use MIME::Lite;
use Cwd;
sub mysqldb_einlesen();
sub sqlkomplettdump();
print "Content-type: text/html\n\n";

&mysqldb_einlesen();
&sqlkomplettdump();
print "erledigt";

################################################################# mysql##################################################################
sub mysqldb_einlesen()
{
$verbinden1 = "DBI:mysql:XXX.1and1.com:3306";
$user = "XXX";
$pw = "XXX";
$dbh = DBI->connect( "$verbinden1","$user","$pw") || die "$! Database connection not made: $DBI::errstr";
};

sub sqlkomplettdump()
{
my $db = "XXX";
my $user = "XXX";
my $host = "XXX.db.1and1.com";
my $pass = "XXX";
my $savefile = "dump_sql.sql.gz";
system("mysqldump --all -l --user=$user --host=$host --password=$pass $db | gzip > $savefile") == 0 or die("Konnte Dump nicht anlegen: $! ($?)");
print "sqlDump wurde angelegt<br/>\n";
#########################################################################################################################
my $mailto = 'meineemailadresse@hier.de';
my $mailfrom = 'Servermail@1&1.de';
my $subject = 'Automatisches komplettes Daten-Backup';
my $Sendmail_Prog = "/usr/lib/sendmail";
my $localdir = cwd;
open(MAIL,"|$Sendmail_Prog -t") or print "Mailprogramm konnte nicht gestartet werden\n";
my $backupmail = new MIME::Lite ;
$backupmail = build MIME::Lite From => $mailfrom, To => $mailto, Subject => $subject , Type => 'TEXT', Data => "Automatisches komplettes Backup." ;
my $kpath = "$localdir"."/"."$savefile";
attach $backupmail Type => 'x-gzip', Path => $kpath, Encoding => "base64", Filename => "ttgsqlbackup.sql.gz";
$backupmail -> print(\*MAIL) or die $!;
close(MAIL) or die $!;
print "Mail an $mailto wurde versendet.<br/>\n";


};

Vielen Dank schon mal!
 

Duddle

Posting-Frequenz: 14µHz

Wie genau gehst du vor? Bash (die Kommandozeile) versucht, ein Programm namens "30" auszuführen, also scheinst du die crontab-Zeile irgendwoanders einzufügen.
Ich scheitere an der Eingabe im Putty-Editor:
PuTTy ist kein Editor an sich, deshalb beschreibe mal bitte genau, was du wie machst.


Duddle
 

strichcode

Nicht mehr ganz neu hier

Hallo Duddle,
vielen Dank für Deine Hilfe!
Ich betrete damit völliges Neuland.
Ich rufe Putty auf und bekomme dort ein "schwarzes Fenster mit blinkendem Cursor.
login as: _ hier das einsundeins username
uxxxxx's password: _ hier das password

dann kommt:
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
(uiserver):uxxxxxxx: _

Nun gebe ich ein was oben steht:
mailto=meineemailadresse@hier.de
30 5 * * * /kunden/homepages/XX/XXXXXXXXXXX/htdocs/backup.pl

und bekomme folgende Meldung:
-bash: 30: command not found

Die 30 ist nicht das Programm, sondern die Uhrzeit (5.30 Uhr).
Siehe hier:
Das ist eine Hilfe-Seite von 1und1.
Laut 1und1 sollte er jeden Morgen um 5.30 Uhr damit das Script ausführen.

Ich bin wie gesagt ratlos, im Netz finde ich nicht das richtige und die Telefonate mit 1und1 waren auch nicht erfolgreich.
 

Duddle

Posting-Frequenz: 14µHz

Okay, die Anleitung sagt zwar, was in die crontab eingetragen werden muss, aber nicht wie. Diese Anleitung beschreibt das wie:

Problem dabei ist, dass du wohl nichts mit dem Editor vi anfangen kannst, deshalb beschreibe ich es mal so stur wie möglich.
Als Vorbereitung: starte notepad und füge dort
Code:
mailto=meineemailadresse@hier.de
30 5 * * * /kunden/homepages/XX/XXXXXXXXXXX/htdocs/backup.pl
ein, dort ersetzt du gleich deine Mailadresse usw. richtig.

Dann:
1. Log dich per putty ein, also dass du "The programs included with the Debian" usw. siehst.
2. gib den Befehl "crontab -e" ein, es sollte sich eine Datei öffnen, die wahrscheinlich schon ein paar Einträge / Kommentare enthält.
3. drück "G" (grosses G wie Gundula) um zur letzten Zeile zu gelangen.
4. drück "o" (kleines o wie Otto) um eine neue Zeile zu beginnen, jetzt sollte unten links im Fenster INSERT oder EINFUEGEN stehen.
5. kopiere den Text aus der notepad-Datei oben, d.h. alles markieren, Bearbeiten - Kopieren
6. jetzt zurück in das Putty-Fenster und drück da drin die rechte Maustaste. Das sollte die Zwischenablage einfügen. Prüf nach, ob alles da drin steht wie in der notepad-Datei.
6.a) falls nein, oder du einen anderen Fehler gemacht hast, drück ESC. Damit sollte INSERT / EINFUEGEN links unten verschwinden. Dann drück Doppelpunkt, dann ein "q!" und Enter, also ":q!". Damit verlässt du die Datei ohne sie zu speichern. Dann fang wieder bei 2. an.
6.b) falls ja, drück ESC. Damit sollte INSERT / EINFUEGEN links unten verschwinden. Dann drück Doppelpunkt, dann ein "x" und Enter, also ":x". Damit speicherst und schliesst du die Datei. Jetzt sollte da "Installing Crontab" o.ä. stehen.


Duddle
 

strichcode

Nicht mehr ganz neu hier

DANKESCHÖN!
Geschafft, da steht nun: crontab:installing new crontab
Ich hab mich stur an Deine Anleitung gehalten und es hat geklappt.
Die Erklärung bei 1und1 hätte ruhig etwas ausführlicher sein können, damit hätte ich das allein nie hingekriegt.
Wenn ich heute nacht eine email, mit der DB-Sicherung bekomme war es das.
Falls nicht, melde ich mich noch mal.
Vielen Dank!
 

Curanai

Aktives Mitglied

Guten Morgen zusammen,

zwei Rückfragen, die ich bitte beantwortet wissen möchte:

1. Warum ist "mailto" in der Crontab für diese Ausgabe anzugeben (s. $backupmail)?

2. @ duddle: Wenn ich eine 200 Zeilen Crontab habe (hab ich!) und aus der Mitte beliebig Zeilen entfernen würde wollen, so fehlt mir ein Markieren und Gesamtlöschen - gibt es das auch? Dieses Dauerdrücken von ENTF geht mir manchmal ECHT auf die Weichteile ...

Kleine Randnotiz noch: Statt "o" geht auch das Durchdrücken von EINFG, wodurch der Modus sich wechselt und dies unten links anzeigt.
 

Duddle

Posting-Frequenz: 14µHz

1. Warum ist "mailto" in der Crontab für diese Ausgabe anzugeben (s. $backupmail)?
Alle Ausgaben auf stderr und stdout, die bei der Ausführung der Crontab erzeugt werden, werden an die Adresse in mailto geschickt. Es hat keinen Einfluss auf die eigentlichen Scripte/Befehle, die per Cron ausgeführt werden.
2. @ duddle: Wenn ich eine 200 Zeilen Crontab habe (hab ich!) und aus der Mitte beliebig Zeilen entfernen würde wollen, so fehlt mir ein Markieren und Gesamtlöschen - gibt es das auch?
Kommt drauf an, welcher Editor eingestellt ist. Vim hat mit Shift+v eine zeilenweise Markierung, die du dann per d löschen kannst. Vi hat das glaube ich nicht, aber dort kannst du eine Zeile mit dd löschen, bzw. 42 Zeilen mit 42dd. Nano hingegen hat den Shortcut Ctrl+k, um standardmässig eine Zeile zu löschen (eigentlich in den Zwischenspeicher auszuschneiden).


Duddle
 

Curanai

Aktives Mitglied

Hmmm ... ich habe mir für diese "Rückmeldungen" aus dem Cron meine Einträge derart erweitert: [cron] 1>>~/buglog 2>&1 (was mir schlichtweg eine Datei schreibt; dringende Fehler auf SQL bspw. kommen aber per E-Mail) ... klappt, macht die Crontab aber auch ziemlich voll (und viiiiel Zeichen zum Löschen - daher die Frage mit "ganze Zeile").

Ließe sich mailto dann auch quasi wie folgt bedienen?
mailto
[cron1]
mailto
[cron2]
[cron3]
...

Linux und ich sind keine Freunde - ich kann also nicht einschätzen, ob die Crontab bei Start reinschaut und nach einem mailto sucht (first serve quasi), welcher dann bedient wird - oder ob die Crontab derart flexibel ist, dass sie zur Laufzeit mailto handhaben könnte und sich Cronjobs je Projekt verteilen lassen könnten.

Ich danke Dir.
 

Duddle

Posting-Frequenz: 14µHz

Das sollte funktionieren, da MAILTO nur eine Umgebungsvariable ist. Ansonsten: probier es aus.


Duddle
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.613
Beiträge
1.538.345
Mitglieder
67.524
Neuestes Mitglied
BSKGA
Oben