seltsames problem mit root-cronjob

31/05/2008 - 19:52 von Gerhard Wolf | Report spam
Hallo,

ich habe mit root einen cron-job eingerichtet:

*/2 * * * * /root/bin/scripts/idleshutdown.sh
oder auch:
*/2 * * * * root /root/bin/scripts/idleshutdown.sh
im dem script steht:

my_app_state=`su gerd -c 'dcop kdesktop KScreensaverIface isBlanked'`

# my_app_state=`su harry -c '/opt/kde3/bin/dcop kdesktop KScreensaverIface
isBlanked'`
if [ "$my_app_state" == "true" ]
then
echo Shutdown system
/sbin/shutdown -r now
echo 1 >> idleshutdown.log
else
echo 2 >> idleshutdown.log
echo No shutdown
fi

die Zeile:
su gerd -c 'dcop kdesktop KScreensaverIface isBlanked'
làsst sich als root fehlerfrei ausführen.

doch root bekommt cronjob-mails mit dem Inhalt:

bash: dcop: command not found

obwohl die Zeile als root aufgerufen funktioniert.
der nàchste Versuch:

# my_app_state=`su harry -c '/opt/kde3/bin/dcop kdesktop KScreensaverIface
isBlanked'`

meldet:
ERROR: Couldn't attach to DCOP server!

?? Wo liegt das Problem? Warum verhàlt sich der cron-job Befehl anders als
direkt an der Konsole eingegeben?
 

Lesen sie die antworten

#1 Thomas Rachel
31/05/2008 - 20:15 | Warnen spam
Gerhard Wolf schrieb:

die Zeile:
su gerd -c 'dcop kdesktop KScreensaverIface isBlanked'
làsst sich als root fehlerfrei ausführen.

doch root bekommt cronjob-mails mit dem Inhalt:

bash: dcop: command not found

obwohl die Zeile als root aufgerufen funktioniert.



Beliebte Falle: $PATH ist im Cronjob üblicherweise anders gesetzt als
interaktiv.


der nàchste Versuch:

# my_app_state=`su harry -c '/opt/kde3/bin/dcop kdesktop KScreensaverIface
isBlanked'`

meldet:
ERROR: Couldn't attach to DCOP server!

?? Wo liegt das Problem? Warum verhàlt sich der cron-job Befehl anders als
direkt an der Konsole eingegeben?



Ähnliches Problem: $DISPLAY ist unpassend gesetzt. Arbeitest Du
interaktiv, erbt Deine aufgerufene Shell diesen Wert vom Aufrufer.
Aufgerufene Programme können dann den Wert nach Belieben weiterverwenden
- z.B. wird DISPLAY=localhost:0 zu ~/.DCOPserver_localhost__0 etc...

Unsaubere Lösung wàre einfach ein DISPLAY=:0 davorzuklatschen, sauberer
wàre dann schon irgend ein Skript, das versucht, zu raten...


Thomas

Ähnliche fragen