cron führt script nicht aus

Dieses Thema im Forum "Debian/Ubuntu/Knoppix" wurde erstellt von Gast1, 19.02.2009.

  1. Gast1

    Gast1 Guest

    Hi
    Ich habe Debian Lenny (amd64) und möchte gerne stündlich ein Script ausführen lassen, dass prüft, ob jemand auf dem Rechner eingeloggt ist, und ihn ggf runterfährt.

    Ich habe die ganze Geschichte vor kurzem unter KateOS eingerichtet. Dort hat es super funktioniert, doch unter Debian scheint das nicht der Fall zu sein:

    Das Script selber liegt unter "/root/scripts/autoshutdown.sh" - es ist ein bash-script

    In "/etc/cron.hourly" habe ich eine symbolische Verknüpfung auf dieses Script angelegt.
    Code:
    carl:/etc/cron.hourly# ll
    insgesamt 0
    lrwxrwxrwx 1 root root 29 18. Feb 13:16 autoshutdown.sh -> /root/scripts/autoshutdown.sh
    Rufe ich das Script von dort per Hand auf, wird es auch ausgeführt (Pfad stimmt also).

    lt. syslog schein cron auch zu funktionieren:
    Code:
    Feb 19 11:17:01 carl /USR/SBIN/CRON[2730]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
    Warum wird das Script von cron nicht ausgeführt?
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.056
    Zustimmungen:
    8
    Rechte des Scripts, evtl. ein noexec-Mount, fehlende Pfade, ... - Möglichkeiten gibt's viele.
     
  4. Gast1

    Gast1 Guest

    Zum noexec-mount, und fehlendem Pfad:
    Zu den Berechtigungen:
    Code:
    -rwxr--r-- 1 root root 213 19. Feb 10:32 autoshutdown.sh
    Ist also auch executable.
     
  5. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.056
    Zustimmungen:
    8
    Naja, nur leider ist PATH und andere Envs unter Cron was anderes als in der Login-Shell...
     
  6. foexle

    foexle Kaiser

    Dabei seit:
    02.05.2007
    Beiträge:
    1.104
    Zustimmungen:
    0
    Ort:
    Saarbrücken
    bitte mal also root loggen und die
    contab -e posten

    Wenn du das dort einträgst, dann gehts auch :>
     
  7. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.056
    Zustimmungen:
    8
    das $PATH-Problem, so es denn das ist wird er dort genau so haben.
     
  8. Gast1

    Gast1 Guest

    Code:
      1 # /etc/crontab: system-wide crontab
      2 # Unlike any other crontab you don't have to run the `crontab'
      3 # command to install the new version when you edit this file
      4 # and files in /etc/cron.d. These files also have username fields,
      5 # that none of the other crontabs do.
      6 
      7 SHELL=/bin/sh
      8 PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
      9 
     10 # m h dom mon dow user  command
     11 17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
     12 25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
     13 47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
     14 52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
     15 #
     16 
    Was hat den $PATH damit zu tun? Wird der Befehl nicht explizit per [.]/*pfad*/*befehl* aufgerufen?
     
  9. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.056
    Zustimmungen:
    8
    $PATH ist auch relevant für das, was im Script steht...
     
  10. Gast1

    Gast1 Guest

    Ja, das ist mir klar.
    Manuell kann ich das script ja ausführen... Ist das PATH aus dem config-file denn ein anderes als das PATH in der bash?
    Jedenfalls benutze ich nur shutdown/echo/who/last/head/date/test/wc ... nichts exotisches, nur Standard-Befehle. Und die Pfade im Script sind absolut angegeben (also /root/...)
     
  11. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.056
    Zustimmungen:
    8
    poste das Script doch einfach mal (dann finden wir's sicher raus) oder verwende auch im Script konsequent absolute Pfade.
     
  12. Gast1

    Gast1 Guest

    Code:
    #!/bin/bash
    
    if [ "`who | wc -l`" == "0" ] ; then
            last -1 | head -n 1 >> /root/autoshutdown.log
            date >> /root/autoshutdown.log
            shutdown -h now
    fi
     
  13. Gast1

    Gast1 Guest

    Mach das doch mal (natürlich für alle executables in Deinem Script), Dein bester Freund zum Herausfinden der Pfade dürfte "which" sein.
     
  14. Gast1

    Gast1 Guest

    Ich habe derzeit leider kein Zugriff auf den PC :(
    Bin über's Wochenende weg und leider funktioniert Wake-on-LAN übers internet nur sporadisch...

    Werde aber Sonntag direkt die PATH-Geschichte prüfen.
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. Gast1

    Gast1 Guest

    So, der aktuelle stand:
    Code:
    #!/bin/bash
    
    echo "`/bin/date` exec autoshutdown.sh" >> /root/autoshutdown.log
    
    if [ "`/usr/bin/who | /usr/bin/wc -l`" == "0" ] ; then
    	/usr/bin/last -1 | /usr/bin/head -n 1 >> /root/autoshutdown.log
    	# date >> /root/autoshutdown.log
    	/sbin/shutdown -h now
    fi
    Wobei alle verzeichnisse auch in PATH stehen. Sowohl in der crontab, als auch in $PATH

    Es geschieht nichts.

    Ich habe auch in cron.hourly ein script angelegt, welches autoshutdown aufruft, und stderr/stdout in eine Datei schreibt.
    Code:
    #!/bin/bash
    autoshutdown.sh 2> /root/stderr.txt 1> /root/stdout.txt
    Auch dieser wird scheinbar nicht ausgeführt. Zumindest steht nichts in std*.txt und auch nichts in der autoshutdown.log
     
  17. #15 floyd62, 23.02.2009
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Was liefert dir ein "ls -l /root/scripts/autoshutdown.sh"? Bisher haben wir nur gesehen, dass der Link "/etc/cron.hourly/autoshutdown.sh" ausführbar ist, aber nicht, wie die Berechtigungen auf dem Skript selbst gesetzt sind. Und wenn das Ding nicht ausführbar wäre, würden zwar die "stderr.txt" und "stdout.txt" bei jedem Versuch neu geöffnet (Modifikationsdatum sollte sich also ändern), aber es würde nichts reingeschrieben, weil das Skript ja nicht anläuft ...
     
Thema:

cron führt script nicht aus

Die Seite wird geladen...

cron führt script nicht aus - Ähnliche Themen

  1. script wird von cronjob nicht korrekt ausgeführt - Centos 5

    script wird von cronjob nicht korrekt ausgeführt - Centos 5: Guten Morgen, und hallo ins Forum. Ich habe ein Problem mit meinem Sicherungsserver: ich möchte zur täglichen inkrimentellen Sicherung...
  2. script wird als cronjob anders ausgeführt

    script wird als cronjob anders ausgeführt: Hallo Leute Ich bin neu hier und Scriptanfänger, habe aber von Programmieren (vorw. JAVA) berufliche Erfahrung. Nun zum Problem; ich hab...
  3. Crontab führt Befehl nicht aus

    Crontab führt Befehl nicht aus: Servus zusammen, Als Cronjob lasse ich mir jede Minute mit dem Befehl: listento > /home/mitzekotze/.centerim/awaymsg-icqden aktuellen Titel,...
  4. Crontab wird falsch ausgeführt

    Crontab wird falsch ausgeführt: Hi, ich habe nun zum ersten mal Crontab verwendet. Ich will das er alle 10 min einen Befehl in der Console ausführt dazu bin ich so vorgegangen:...
  5. Cronjobs werden nicht ausgeführt

    Cronjobs werden nicht ausgeführt: Hallo, hab hier folgendes Problem auf nem Suse 9.3-Server, es werden keine Cronjobs mehr ausgeführt, obwohl cron läuft... Wo setze ich denn...