[Gelöst]Crontab Shell Script hat keinen Zugriff auf Mysql

Hinweis: In dem Thema [Gelöst]Crontab Shell Script hat keinen Zugriff auf Mysql gibt es 4 Antworten. Der letzte Beitrag () befindet sich ganz unten auf dieser Seite.
  • Das Script holt sich die Datensatzmenge einer Tabelle

    Code
    cp /home/sabine/db.sh /home/sabine/ret/laueft.sh		# Cron läuft
    sql1="$(echo "SELECT count(*)  AS menge FROM jobs WHERE status= 1 " | mysql  -u sabine -pgeheim db )"
    menge=${sql1//menge}; 
    
    
    if [ $menge -gt 0 ]
    then 
    	cp /home/sabine/db.sh /home/sabine/ret/ja.sh		# ok Status
     fi


    Melde ich mir über mein User-Accunt an, und starte das Script in der Konsole über
    ./db.sh
    läuft es wie es laufen sollte.


    Nun schmeiße ich das in meine /etc/crontab, natürlich über Root
    * * * * * sabine /home/sabine/db.sh


    über den 1. cp Befehl kommt das Script noch rüber, also der Cron läuft,
    aber der Mysql-Select wird nicht ausgeführt, menge wird nicht Gesetz.
    Auch in der Root-Konsole läuft das Script normal


    Nur Im Crone Crash Mysql
    Hat jemand eine Idee?


    Suse 13.1

    Einmal editiert, zuletzt von neptun ()

    Für den Inhalt des Beitrages 77314 haftet ausdrücklich der jeweilige Autor: neptun

  • Der Linux-User ist sabine, darunter musst das Script laufen.
    Ein Mysql User sabine habe ich auch eingerichtet.
    Der user hat die gleichen Rechte wir Root
    In der Root und Sabine Konsole läuft es ja.


    In der /etc/crontab:
    * * * * * sabine/home/sabine/db.sh


    Ich hatte auch schon versucht, eine User Cron anzulegen,
    aber es passiert genau das gleiche



    Wenn alles nicht fruchtet, würde ich im Shellscript ein PHP-Script anwerfen.
    das wäre natürlich wieder umständlich
    frage man Google nach cronjobs mysql
    kommen gleich 100 Typs
    wie man ein Mydump einrichtet, was wusste ich als Mädel schon mit 8!

    Einmal editiert, zuletzt von neptun ()

    Für den Inhalt des Beitrages 77317 haftet ausdrücklich der jeweilige Autor: neptun

  • Vorweg: von mysql habe ich keine Ahnung, von cron kaum. Allerdings weiß ich, daß das Environment bei cron viel Spaß bereiten kann...
    Mein Vorschlag:
    Ruf anstelle des Script mal ein Script auf, daß dir die Environment- Variablen in eine Datei schreibt, also z.B. die Ausgaben "id" usw. und schau nach, ob da noch alles paßt, wenn das über cron läuft.
    Sonst halt mal schauen, was die Logs von mysql hergeben.


    flo

    Für den Inhalt des Beitrages 77320 haftet ausdrücklich der jeweilige Autor: grossing

  • wie flo schon angedeutet hat, über ein Cronjob sind keine Environment- Variablen verfügbar,
    also alles schön direkt Pathe angeben.


    Und auch einfach mysql aufrufen sollte nicht gehen, obwohl mein suse 13.1 das problemlos machte, aber jede Konvertierung
    auf einen anderen Server kann es Probleme machen.


    Den direkte Path von mysql bekommt man mit:
    which mysql


    Bei Suse ist es : /usr/bin/mysql


    Also Datenbank Updaten über ein Shell Script:

    Code
    ins="$(echo "UPDATE  jobs SET status=2 WHERE id=12 " | /usr/bin/mysql  -u root -pgeheim db )"


    Ich habe einen TV Recorder programmiert, über eine Web-Oberfläche werden die Jobs eingegeben, die landet in
    einer Datenbank.
    Ein Cronjob schaut in Min. Takt, ob in die Datenbank Aufträge liegen, und nimmt die TV-Programme über ein Linux-Server auf.
    Falls es jemand interessiert, stelle ich die 2 Schripte (php + Shell) hier zu Verfügung.

    2 Mal editiert, zuletzt von neptun ()

    Für den Inhalt des Beitrages 77393 haftet ausdrücklich der jeweilige Autor: neptun