antihero: Cronjob funktioniert nicht

Hallo,

ich habe einen Cronjob angelegt, der mir jeden Tag einen Dump der Datenbank zuschicken soll.

Die Datei backup.sh sieht folgendermaßen aus:

#!/bin/sh
mysqldump --user=USERNAME --password=PASSWORT DATENBANKNAME > DATENBANKNAME.sql
mail -s "Backup" EMAILADRESSE < DATENBANKNAME.sql
rm -f DATENBANKNAME.sql

rufe ich diese Datei manuell mit ~/html/backup.sh
auf, bekomme ich die Mail ohne Probleme zugeschickt.

Damit ich das nicht machen muss, habe ich folgenden Cronjob mit crontab -e angelegt:

* 3 * * * ~/html/backup.sh

Ich bekomme aber keine Mail, sondern die Fehlermeldung:

/srv/www/htdocs/web5/html/backup.sh: line 2: DATENBANKNAME.sql: Permission denied
/srv/www/htdocs/web5/html/backup.sh: line 3: DATENBANKNAME.sql: No such file or directory

Was mache ich falsch? Auf einem anderen Server hatte es mit genau dieser Vorgehensweise keinerlei Probleme gegeben. Der Pfad stimmt.

Cheers, ah

  1. Hallo

    #!/bin/sh
    mysqldump --user=USERNAME --password=PASSWORT DATENBANKNAME > DATENBANKNAME.sql
    mail -s "Backup" EMAILADRESSE < DATENBANKNAME.sql
    rm -f DATENBANKNAME.sql

    Ich bekomme aber keine Mail, sondern die Fehlermeldung:
    /srv/www/htdocs/web5/html/backup.sh: line 2: DATENBANKNAME.sql: Permission denied

    Was mache ich falsch? Auf einem anderen Server hatte es mit genau dieser Vorgehensweise keinerlei Probleme gegeben. Der Pfad stimmt.

    Ich vermute, dass Dein Cronjob in _seinem_ Arbeitsverzeichnis keine Schreibrechte hat. Gib statt des relativen Pfades einen absoluten Pfad an, mit genauer Angabe, in welchem Verzeichnis der Dump abgelegt werden soll. Teste wiederum zuerst an der Kommandozeile.

    Die zweite Fehlermeldung ist natürlich ein Folgefehler und entfällt, wenn der Dump erfolgreich angelegt werden kann.

    Freundliche Grüße

    Vinzenz

    1. Ich vermute, dass Dein Cronjob in _seinem_ Arbeitsverzeichnis keine Schreibrechte hat. Gib statt des relativen Pfades einen absoluten Pfad an, mit genauer Angabe, in welchem Verzeichnis der Dump abgelegt werden soll. Teste wiederum zuerst an der Kommandozeile.

      Die zweite Fehlermeldung ist natürlich ein Folgefehler und entfällt, wenn der Dump erfolgreich angelegt werden kann.

      Freundliche Grüße

      Vinzenz

      Vielen Dank für die vielen Hilfesellungen!

      Ich hatte es zuerst mit dem absoluten Pfad probiert. Da gab es die gleichen Fehlermeldungen. Die Datei backup.sh hat die Rechte 755.
      Wie kann ich angeben, in welchem Verzeichnis der Dump abgelegt werden soll?

      cheers, ah

      1. Tach,

        Wie kann ich angeben, in welchem Verzeichnis der Dump abgelegt werden soll?

        einfach vor dem Dateinamen den Pfad angeben.

        mfg
        Woodfighter

        1. Tach,

          Wie kann ich angeben, in welchem Verzeichnis der Dump abgelegt werden soll?

          einfach vor dem Dateinamen den Pfad angeben.

          mfg
          Woodfighter

          Hallo,

          also, ich habe jetzt überall den kompletten Pfad angegeben. Aber es funktioniert trotzdem nicht. Ich bekomme den Dump zugesendet, wenn ich es manuell mit ~/Datei versuche. Der Cronjob geht nicht.

          Den Cronjob habe ich, wie die Datei, als web5 angelegt. Und in dem Verzeichnis, in dem die Datei liegt, hat web5 alle Rechte.

          Ich hatte es auch noch versucht, indem ich den Cronjob über die Confixx Oberfläche angelegt habe. Ohne Erfolg.

          Wenn jemand noch Ideen hat, würde ich mich über einen weiteren Lösungsvorschlag sehr freuen.

          cheers, ah

          1. Tach,

            Den Cronjob habe ich, wie die Datei, als web5 angelegt. Und in dem Verzeichnis, in dem die Datei liegt, hat web5 alle Rechte.

            hast du auch daran gedacht, die Pfade der Anwendungen anzugeben? Die $PATH-Variable ist bei cron zumeist anders als im normalen Kontext. Poste doch bitte nochmal das komplette Script, wie es jetzt aussieht.

            Wenn jemand noch Ideen hat, würde ich mich über einen weiteren Lösungsvorschlag sehr freuen.

            An den abschließenden Zeilenumbruch in der crontab hast du gedacht?

            mfg
            Woodfighter

            1. Tach,

              Den Cronjob habe ich, wie die Datei, als web5 angelegt. Und in dem Verzeichnis, in dem die Datei liegt, hat web5 alle Rechte.

              hast du auch daran gedacht, die Pfade der Anwendungen anzugeben? Die $PATH-Variable ist bei cron zumeist anders als im normalen Kontext. Poste doch bitte nochmal das komplette Script, wie es jetzt aussieht.

              Wenn jemand noch Ideen hat, würde ich mich über einen weiteren Lösungsvorschlag sehr freuen.

              An den abschließenden Zeilenumbruch in der crontab hast du gedacht?

              mfg
              Woodfighter

              Hallo Woodfighter,

              das Script sieht jetzt so aus:

              #!/bin/sh
              mysqldump --user=web5 --password=PASSWORD DATENBANKNAME > /srv/www/htdocs/web5/html/backup/DATENBANKNAME.sql
              mail -s "Backup" EMAILADRESSE < /srv/www/htdocs/web5/html/backup/DATENBANKNAME.sql
              rm -f /srv/www/htdocs/web5/html/backup/DATENBANKNAME.sql

              Der Cronjob sieht so aus:

              15 11 * * * /srv/www/htdocs/web5/html/backup/backup.sh

              Der Zeilenumbruch ist vorhanden.

              Ich bekomme jetzt die Fehlermeldung:

              read: Invalid or incomplete multibyte or wide character
              Invalid argument
              . . . message not sent.

              Vielen Dank für die Hilfe,

              ah

              1. Tach,

                read: Invalid or incomplete multibyte or wide character
                Invalid argument
                . . . message not sent.

                also enthält das Datenbankfile vermutlich UTF8 und die LANG-Variable ist für den Cronjob anders als gewohnt. Du könnstest also zum Beispiel die Variable passend füllen, oder alternativ den Inhalt der Mail vorher durch uuencode jagen.

                mfg
                Woodfighter

                1. Tach,

                  read: Invalid or incomplete multibyte or wide character
                  Invalid argument
                  . . . message not sent.

                  also enthält das Datenbankfile vermutlich UTF8 und die LANG-Variable ist für den Cronjob anders als gewohnt. Du könnstest also zum Beispiel die Variable passend füllen, oder alternativ den Inhalt der Mail vorher durch uuencode jagen.

                  mfg
                  Woodfighter

                  Hallo Woodfighter,

                  danke für die Hinweise. ich bin allerdings - wie Du sicher schon bemerkt hast ;-) - nicht gerade der, den man als Fachmann bezeichnen würde. Wie kann ich die Variable passend füllen bzw. den Inhalt durch uuencode jagen?

                  Cheers, ah

                  1. Für alle, die in Zukunft vor dem gleichen Problem stehen sollten:

                    Die Datei einfach als Anhang versenden. So klappt es jedenfalls bei mir.

                    mail -s "Backup" -a "/srv/www/htdocs/web5/html/backup/usr_web5_1.sql" EMAILADRESSE

                    Cheers, ah

                    1. Tach,

                      Die Datei einfach als Anhang versenden. So klappt es jedenfalls bei mir.

                      mail -s "Backup" -a "/srv/www/htdocs/web5/html/backup/usr_web5_1.sql" EMAILADRESSE

                      da benutzt du offensichtlich eine wesentlich andere Version von mail als ich, bei mir kann ich mit -a weitere Header angeben, aber keine Attachments.

                      mfg
                      Woodfighter

                      1. Tach,

                        Die Datei einfach als Anhang versenden. So klappt es jedenfalls bei mir.

                        mail -s "Backup" -a "/srv/www/htdocs/web5/html/backup/usr_web5_1.sql" EMAILADRESSE

                        da benutzt du offensichtlich eine wesentlich andere Version von mail als ich, bei mir kann ich mit -a weitere Header angeben, aber keine Attachments.

                        mfg
                        Woodfighter

                        Habe mich auch gewundert, da in meinen Büchern nichts dergleichen stand. Aber durch "man mail" habe ich das hier gelesen:

                        -a file

                        Attach the given file to the message.

                        Funktioniert prima.

                        Cheers, ah

                        1. Tach,

                          Habe mich auch gewundert, da in meinen Büchern nichts dergleichen stand. Aber durch "man mail" habe ich das hier gelesen:

                          -a file

                          Attach the given file to the message.

                          sag ich ja, meins sagt "-a      Specify additional header fields on the command line such as "X-Loop: foo@bar" etc."

                          mfg
                          Woodfighter

  2. Sup!

    Der Cronjob hat nicht genug Rechte, läuft also für den falschen User, oder aber die Rechte im Verzeichnis, wo der Dump hin soll, sind falsch gesetzt. Ist doch offensichtlich. Kannst ja mal ins Skript "whoami" schreiben und den Dump nach /tmp vornehmen lassen, vielleicht ist das erhellend.

    Gruesse,

    Bio

    --
    Never give up, never surrender!!!
  3. Hast du denn auch den gleichen Nutzer für den cron job wie für die Ausführung dirket in der Konsole?