staging.inyokaproject.org

script und cron/anacron

Status: Gelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

klinge

Avatar von klinge

Anmeldungsdatum:
17. Februar 2010

Beiträge: Zähle...

hallo liebe gemeinde

ich habe mir ein script gebastelt (bin mich erst so etwas am einprobieren), das auf dem desktop liegt. es ist ausführbar und funktioniert 'einwandfrei' wenn ich es manuell starte.

#!/bin/bash

export DISPLAY=:0.0
   
	zenity --question --title "gedit" --text "Soll das programm gedit geöffnet werden?"
        if [ $? = 0 ];then

                gedit
        else
                zenity --info --text "Abgebrochen..."
                exit 1

        fi

im ordner /etc/cron.d habe ich eine textdatei angelegt mit folgendem inhalt:

22 23 * * *	root oder user	if [ -x /home/ra52ai/Desktop/gedit.sh ]; then /home/ra52ai/Desktop/gedit.sh; fi;

leider startet das skript nicht richtig. es wird nur die meldung 'Abgebrochen' angezeigt und sonst passiert nichts.

ersetze ich den script inhalt mit

#!/bin/sh

export DISPLAY=:0.0

gedit

dann startet cron.d das ganze einwandfrei.

hat jemand eine idee was ich falsch mache?

merci und liebe grüsse,k

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

... ja, da haben wir doch wieder das Problem mit den fehlenden Umgebungsvariablen, nicht wahr ...?

Was von cron gestartet wird, läuft im Systemkontext, und da fehlt eben der Inhalt der Variablen, also auch von $PATH
- das hast Du bei dem cron.d - Eintrag ja auch schon berücksichtigt, inedem Du brav absolute Pfade verwendet hast. Der "she-bang" ist auch ein absoluter Pfad, aber der Befehl zenity nicht. Den kann er nur mit gültigem $PATH finden ...

Also, ersetz mal beide Aufrufe von zenity durch /usr/bin/zenity und der Tag ist wahrscheinlich gleich wieder schön. ☺
(übrigens, wieso gedit (statt /usr/bin/gedit) trotzdem funktioniert, das verstehe ich nicht ...)

LG,

track

klinge

(Themenstarter)
Avatar von klinge

Anmeldungsdatum:
17. Februar 2010

Beiträge: Zähle...

hallo track

erstmal danke, leider brachte dein tipp nicht den gewünschten erfolg.

ich habe das script wie folgt geändert:

#!/bin/bash

export DISPLAY=:0.0
   
/usr/bin/zenity --question --title "Back2" --text "Soll das programm gedit geöffnet werden?"
if [ $? = 0 ];
then
/usr/bin/gedit
else
/usr/bin/zenity --info --text "Abgebrochen..."
exit 1
fi

aber leider erscheint, wenn ich es aus cron.d starte immer noch nur die meldung 'Abgebrochen...' was könnte sonst noch helfen?

liebe grüsse,klinge

theinlein

Anmeldungsdatum:
29. Dezember 2007

Beiträge: Zähle...

Hallo,

unter welchem 'user' läuft das Script? Etwa als 'root' ? Es kann auch sein, dass dein X-Server das nicht zulässt, dass jemand anders ihn benutzt (Standardeinstellung).

theinlein

Anmeldungsdatum:
29. Dezember 2007

Beiträge: Zähle...

Starte das Script mal aus deiner Umgebung heraus mit

env -i meinScript

und schau, was dann passiert

klinge

(Themenstarter)
Avatar von klinge

Anmeldungsdatum:
17. Februar 2010

Beiträge: 404

also

mit env -i meinscript passiert folgendes

ra52ai@Ubuntu-Desktop:/etc/cron.d$ env -i back2.sh
This option is not available. Please see --help for all possible usages.

der user spielt keine rolle das resultat ist bei 'root' und 'ra52ai' (das bin ich) dasselbe.

grüsse,k

theinlein

Anmeldungsdatum:
29. Dezember 2007

Beiträge: Zähle...

Dann mach bei dir mal

man env

irgenwie muss es eine Option geben, die die "geerbte Umgebung" für das zu startende Script wegnimmt.

env  -  meinScript

oder

env --ignore-environment  meinScript

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

klinge schrieb:

aber leider erscheint, wenn ich es aus cron.d starte immer noch nur die meldung 'Abgebrochen...'

Heißt das, dass der 1. Aufruf von zenity nicht funktioniert, aber der 2. Aufruf dann schon ? - das ist ja schon putzig.

Diese Meldung erscheint doch nur, wenn if [ $? = 0 ] falsch ist, nicht wahr ?
Vielleicht hilft der konkrete Rückgabewert weiter. Bau doch mal folgende Änderung ein:

err=$?
if [ $err = 0 ]; then
	/usr/bin/gedit
else
	/usr/bin/zenity --info --text "Abgebrochen mit [$err] ... "
	exit 1
fi

Dann kann man den Wert wenigstens sehen.

edit:
und als 2. Steigerung dann vielleicht auch noch die Fehlermeldung einfangen:

err2=$( /usr/bin/zenity --question --title "Back2" --text "Soll das programm gedit geöffnet werden?" 2>&1 )
err=$?
if [ $err = 0 ]; then
	/usr/bin/gedit
else
	/usr/bin/zenity --info --text "Abgebrochen mit [$err] \"$err2\" ... "
	exit 1
fi

...

track

klinge

(Themenstarter)
Avatar von klinge

Anmeldungsdatum:
17. Februar 2010

Beiträge: 404

also

theinlein sorry so richtig weiter komme ich mit env... nicht hab so ziemlich alle kommbinationen ausprobiert die ausgabe im terminal bleibt gleich. und es popt immer die zweite zenity message 'abgebrochen...' auf den bildschirm. seit ich die erste änderung die track vorgeschlagen hat gemacht habe steht 'abgebrochen mit [255]'

track es ist wirklich putzig, mit vorschlag 1 ändert sich nichts ausser, dass der meldung 'abgebrochen eine zahl beigefügt wird nämlich [1] wenn ich manuell starte und [255] wenn ich aus cron.d starte.

mit der steigerung 2 erscheint immer noch 'abgebrochen...' aber das ganze sieht dann so aus: Abgebrochen mit [255] "This option is not available. Please see --help for all possible usages." ...

ev noch als ergänzung aus cron.d wird nicht nur die erste zenity meldung nicht angezeigt sondern gedit wird acuch nicht gestartet.

danke schon mal für eure hilfe, ich muss jetzt mal gehen werde frühestens heute abend weitermachen.

lg,k

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

... inzwischen habe ich mir die Zeile

env -i /usr/bin/zenity --question --title "Back2" --text "Soll das programm gedit geöffnet werden?"

mal genauer angeguckt, denn die wirft ja auch schon die Meldung "This option is not available. Please see --help for all possible usages."

Dieser Satz stammt eindeutig nicht von env, sondern von zenity ! – also spinnt zenity herum, wenn es nicht die nötigen Variablen gereicht bekommt. (kann man leicht feststellen indem man env und zenity mit sinnlosen Parametern aufruft)

Ok, dann reichen wir ihm mal die nötigen Variablen (mit env -i hatten wir ihm ja alle weggenommen):

env -i DISPLAY=:0.0 /usr/bin/zenity --question --title "Back2" --text "Soll das programm gedit geöffnet werden?"

spinnt immer noch, also habe ich mir mit env mal angeguckt, was er normalerweise so gereicht bekommt, und was davon wichtig sein könnte.

Dann habe ich ihm die Lokalisierung dazu gegeben:

track@ubuntu:~$ env -i DISPLAY=:0.0 LANG=de_DE.UTF-8  /usr/bin/zenity --info --text "Soll das programm gedit geöffnet werden?"
Xlib: connection to ":0.0" refused by server
Xlib: No protocol specified

Diese Option steht nicht zur Verfügung. Bitte verwenden Sie »--help« für alle Anwendungsmöglichkeiten.

- das quittiert er also schon mal mit etwas mehr Antwort, in Deutsch. Ein Hoffnungsschimmer.

Nach etwas probieren bin ich dann auf folgende "Essentials" gekommen. Mit denen läuft er bei mir:

env -i DISPLAY=:0.0 LANG=de_DE.UTF-8 XAUTHORITY=/home/track/.Xauthority  /usr/bin/zenity --info --text "Soll das programm gedit geöffnet werden?"

Jetzt bin ich natürlich neugierig, wieso der 2. Aufruf von zenity bei Dir überhaupt funktioniert hat. (das tat er bei mir nämlich nicht !)

Könntest Du dafür mal bitte folgende Version von Deinem Skript mit env -i back2test.sh im Terminal aufrufen:

#!/bin/bash

export DISPLAY=:0.0
  
echo -----------
env
echo -----------
 
/usr/bin/zenity --question --title "Back2" --text "Soll das programm gedit geöffnet werden?"
if [ $? = 0 ]; then
	/usr/bin/gedit
else
	echo -----------
	env
	echo -----------

	/usr/bin/zenity --info --text "Abgebrochen..."
	echo -----------
	env
	echo -----------

	exit 1
fi

und die Ausgabe hier als Codeblock posten ? – vielleicht wird dann deutlich, wieso der 2. Aufruf wider Erwarten doch funktioniert hat.

track

theinlein

Anmeldungsdatum:
29. Dezember 2007

Beiträge: 1279

Hey Super track!

klinge

(Themenstarter)
Avatar von klinge

Anmeldungsdatum:
17. Februar 2010

Beiträge: 404

also hier mal die ausgabe von env -i back2test.sh:

ra52ai@Ubuntu-Desktop:~/Desktop$ env -i test.sh
-----------
PWD=/home/ra52ai/Desktop
SHLVL=1
DISPLAY=:0.0
_=/usr/bin/env
-----------
This option is not available. Please see --help for all possible usages.
-----------
PWD=/home/ra52ai/Desktop
SHLVL=1
DISPLAY=:0.0
_=/usr/bin/env
-----------
-----------
PWD=/home/ra52ai/Desktop
SHLVL=1
DISPLAY=:0.0
_=/usr/bin/env
-----------

na ja ich kann damit nichts anfangen, aber hab ja auch noch keine ahnung davon 😉

klinge

(Themenstarter)
Avatar von klinge

Anmeldungsdatum:
17. Februar 2010

Beiträge: 404

und noch zu deinen weiteren vorschlägen 👍 es funktioniert!! geil

das skript sieht jetzt folgendermassen aus:

#!/bin/bash

export DISPLAY=:0.0
  

env -i DISPLAY=:0.0 LANG=de_DE.UTF-8 XAUTHORITY=/home/track/.Xauthority /usr/bin/zenity --question --title "Back2" --text "Soll das programm gedit geöffnet werden?"
err=$?
if [ $err = 0 ];
then
/usr/bin/gedit
else
/usr/bin/zenity --info --text "Abgebrochen mit [$err] ..."
exit 1
fi

danke für die hilfe super.

liebe grüsse, klinge

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

env -i DISPLAY=:0.0 LANG=de_DE.UTF-8 XAUTHORITY=/home/track/.Xauthority /usr/bin/zenity --question --title "Back2" --text "Soll das programm gedit geöffnet werden?" 

... ich hoffe mal, Du hast da nicht "track", sondern "ra52ai" stehen (Deinen eigenen Login-Namen)

Und eigentlich soltest Du doch einfach nur die Varaiblen-Zuweisungen übernehmen (mehr nicht): 😉

#!/bin/bash

export DISPLAY=:0.0
export LANG=de_DE.UTF-8
export XAUTHORITY=/home/ra52ai/.Xauthority 

/usr/bin/zenity --question --title "Back2" --text "Soll das programm gedit geöffnet werden?"
err=$?
if [ $err = 0 ]; then
	/usr/bin/gedit
else
	/usr/bin/zenity --info --text "Abgebrochen mit [$err] ..."
	exit 1
fi

Na ja, ich kapiere immer noch nicht, wie Du in Deinem 1. Skript dann doch noch zenity gestartet bekommen hast.
Die Variablen oben sehen bei Dir genau so aus wie bei mir, und für alle zenity- Aufrufe gleich.

LG,

track

klinge

(Themenstarter)
Avatar von klinge

Anmeldungsdatum:
17. Februar 2010

Beiträge: 404

heyhey

na ja jetzt wo dus sagst steht bei mir tatsächlich "track" und nicht mein login-name. 😉

und danke, dass du mir das mit den variablen noch erklärt hast, jetzt verstehe ich sogar was ich/du da gemacht hab/hast. vorher hab ich beim weiterspielen festgestellt, dass ich jetzt zwar mein erstes funktionierendes script gebastelt habe aber trotz guter vorsätze nach einfachheit nicht mehr alles kapiere. 🤣

lg,k

Antworten |