cron führt script nicht aus

G

Gast1

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?
 
Rechte des Scripts, evtl. ein noexec-Mount, fehlende Pfade, ... - Möglichkeiten gibt's viele.
 
Zum noexec-mount, und fehlendem Pfad:
[..]
Rufe ich das Script von dort [, also /etc/cron.hourly,] per Hand auf, wird es auch ausgeführt (Pfad stimmt also).
[..]

Zu den Berechtigungen:
Code:
-rwxr--r-- 1 root root 213 19. Feb 10:32 autoshutdown.sh
Ist also auch executable.
 
Naja, nur leider ist PATH und andere Envs unter Cron was anderes als in der Login-Shell...
 
bitte mal also root loggen und die
contab -e posten

Wenn du das dort einträgst, dann gehts auch :>
 
das $PATH-Problem, so es denn das ist wird er dort genau so haben.
 
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?
 
$PATH ist auch relevant für das, was im Script steht...
 
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/...)
 
poste das Script doch einfach mal (dann finden wir's sicher raus) oder verwende auch im Script konsequent absolute Pfade.
 
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
 
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.
 
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
 
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 ...
 
Die Dateien std*.txt werden nicht erstellt.
Die Berechtigungen von sowohl autoshutdown.sh als auch test.sh ist rwxr-xr-x (755)

Per hand kann ich die scripte ja ausführen. Sie werden nur nicht automatisch ausgeführt...
 
Gibt es
- Logeinträge von cron in /var/log/messages und/oder /var/log/cron?
- cron-Meldungen in der root-Mailbox?
 
/var/log/cron existiert nicht, und in /var/log/messages wird cron nicht erwähnt.
Wie stelle ich das mit der root-mailbox an?

btw: /bin/sh zeigt auf /bin/bash. Es wird also auch die richtige shell verwendet
 
Zuletzt bearbeitet von einem Moderator:
Schau mal in "man run-parts" zu den Namenskonventionen, und mach ein paar "run-parts --test" zum testen.
 
run-part -v --test ./ hat nichts angezeigt. In den man-pages stand zwar nichts drin zu den namen (außer im falle von speziellen modi) aber nach ein wenig googlen hab ich herrausgefunden, dass das .sh das Problem war.
ohne der Endung werden die Scripte jetzt auch aufgelistet.

Danke für eure Hilfe.
 

Ähnliche Themen

Windows clients können nicht mehr auf lange laufendes System zugreifen

Fileserver startet nach Runlevel 6 nicht neu

script wird von Cron ausgeführt, aber einige Befehle nicht

dhcpcd zofft sich mit D-Link 360T

Zurück
Oben