Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
skript frage
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German)
View previous topic :: View next topic  
Author Message
Christian99
Veteran
Veteran


Joined: 28 May 2009
Posts: 1176

PostPosted: Wed Jun 15, 2011 8:52 am    Post subject: skript frage Reply with quote

Hallo, ich hab mal ne Frage zum skript schreiben (dash oder auch bash, wenn nötig):
ich will ein skript schreiben, das xdm stoppt, das nvidiamodul entläd und neu läd, und xdm wieder startet.

wenn ich das aber unter kde von konsole aus starte wird das laufende skript beendet, sobald X beendet wurde, was ja auch ganz normal ist.
ich kann eine screen session und das skript von dort aus starten. gibt es eine möglichkeit, das im skript zu machen, so das screen gestartet wird und das skript im screen ausgeführt wird?
oder ist es möglich, vom skript aus das skript zu disownen? es gibt ja manche daemons oder Programme, wenn man die von einen xterminal aus startet, gehören sie nicht mehr diesen terminal, also man kann das terminal beenden, ohne das programm zu beenden. geht das auch von einem skript aus?

Schönen dank schon mal

Christian
Back to top
View user's profile Send private message
Max Steel
Advocate
Advocate


Joined: 12 Feb 2007
Posts: 2041
Location: My own world! I and Gentoo!

PostPosted: Wed Jun 15, 2011 9:00 am    Post subject: Reply with quote

Ich würde mir etwas in der Richtung basten:

/usr/local/bin/xrestart
Code:
#! /bin/sh
screen -S xrestart '/etc/init.d/xdm stop && modprobe -r nvidia && modprobe nvidia && /etc/init.d/xdm start'


Und falls das nicht hilft derhier geht bestimmt.

/usr/local/bin/xrestart
Code:
#! /bin/sh
screen -S xrestart '/usr/local/bin/xrestart-helper'


/usr/local/bin/xrestart-helper
Code:
#! /bin/sh
/etc/init.d/xdm stop && modprobe -r nvidia && modprobe nvidia && /etc/init.d/xdm start


Aber an und für sich: man screen kann manchmal helfen ;)
_________________
mfg
Steel
___________________
Sorry for my bad English.

Heim-PC: Intel i7-5820K, 32GB RAM, GTX 1080
Laptop: Intel Core i5-4300U, 16GB RAM, Intel Graphic
Arbeit-PC: Intel i5-3470S, 16GB RAM, Intel Graphic
Back to top
View user's profile Send private message
py-ro
Veteran
Veteran


Joined: 24 Sep 2002
Posts: 1733
Location: St. Wendel

PostPosted: Wed Jun 15, 2011 9:32 am    Post subject: Reply with quote

nohup vor dem Skript sollte auch schon genügen.

Py
Back to top
View user's profile Send private message
Christian99
Veteran
Veteran


Joined: 28 May 2009
Posts: 1176

PostPosted: Wed Jun 15, 2011 11:02 am    Post subject: Reply with quote

hallo, und danke.
die erste methode von max steel hatte ich schon, aber da ich ein paar ifs brauche wollte ich ein "richtiges" skript machen.
hab bei screen noch die Variable $STY gefunden, ich prüfe jetzt, ob die da ist, wenn nicht, wird ein screen gestartet, und das skript da drin nochmal ausgeführt. wenn sie da ist, wird es ganz normal ausgeführt. sieht so aus:
Code:
# check if we are in the proper screen session
if [ "$(echo $STY | cut -d. -f2)" != "xrestart" ]; then
        screen -d -m -S xrestart "$0"
        exit
fi


zu nohup:
klingt auch gut, aber das muss ich vors skript schreiben. gibts auch ne möglichkeit das im skript zu verwenden?
könnte man sowas wie #!/usr/bin/nohup /bin/bash als shebang verwenden?
Back to top
View user's profile Send private message
py-ro
Veteran
Veteran


Joined: 24 Sep 2002
Posts: 1733
Location: St. Wendel

PostPosted: Wed Jun 15, 2011 11:20 am    Post subject: Reply with quote

nein, aber du könntest AFAIK einen {} in der Shell mit nohup verwenden

Code:
nohup { foo && bar && blub}
Back to top
View user's profile Send private message
mv
Watchman
Watchman


Joined: 20 Apr 2005
Posts: 6281

PostPosted: Wed Jun 15, 2011 10:23 pm    Post subject: Reply with quote

Von screen würde ich in dem Zusammenhang abraten: Du will gerade die Features von nohup oder disown, also solltest Du eben die verwenden. Das ist portabler (auf einigen Systemen ist vielleicht tmux statt screen installiert, auf anderen weder noch) und umgeht Schwierigkeiten, die durch die zusätzlichen Features von screen entstehen.
Ansonsten hast Du bei screen das selbe Problem wie bei nohup: Du musst das eigentliche Kommando als Argument übergeben. Da die Kommandos bei Dir kurz sind, ist das simpel:
Code:
#! /bin/sh
exec nohup '/bin/sh -c "Bla && blub "'

Bei längerem Code empfiehlt sich ein kurzes Script, das "nohup langes_script" aufruft. Falls es unbedingt ein File sein soll, kannst Du ja noch einen magischen Parameter übergeben und anhand dessen entscheiden, ob nohup oder das "eigentliche" Script ausgeführt wird (sux beispielsweise macht das so ähnlich zum Wechseln der Rechte).
Back to top
View user's profile Send private message
schmutzfinger
Veteran
Veteran


Joined: 26 Oct 2003
Posts: 1287
Location: Dresden/Germany

PostPosted: Thu Jun 16, 2011 9:16 pm    Post subject: Reply with quote

Ich würde das nicht von Innen (X) sondern eher von Aussen lösen. Dieses Problem habe ich auch schon gehabt. Der Grafiktreiber schmiert ab und nimmt den X-Server mit. Vielleicht sogar zusammen mit der Tastatur und der Maus. Dann hilft nur ssh und den X Server von dort neu starten. Auf einem Notebook kann man das aber zum Beispiel auch über eine Sondertaste lösen, die ein ACPI event schickt. Bei nem Thinkpad sieht ACPI zum Beispiel Fn+F1 aber diese Sondertaste wird normalerweise nicht benutzt und erzeugt auch kein Input-event in X. Auf einem anderen Rechner habe ich so ein script mal mit einer Fernbedienung ausgelöst. Lircd ist auch unabhängig von X und kann bei einem eingefrorenen X-Server noch zur Rettung benutzt werden.
Falls du manchmal auch die Tastatur verlierst solltest du von Anfang an versuchen das script von Aussen starten. Auf nem Desktop kann man heutzutage auch ACPI und den Power-Button für sowas benutzen. Für ACPI siehe zum Beispiel http://www.gentoo.de/doc/de/power-management-guide.xml.
Back to top
View user's profile Send private message
Christian99
Veteran
Veteran


Joined: 28 May 2009
Posts: 1176

PostPosted: Fri Jun 17, 2011 12:06 pm    Post subject: Reply with quote

danke noch für die zusätzlichen hinweise, aber die screen Lösung ist für mich völlig hinreichend. ich hab nur einen rechner, auf dem ist screen, und wenn ich mal noch mehr rechner haben sollte, wird da auch screen drauf sein.
@schmutzfinger: ich will eincfach nur ein kleines skript, das einen neuen grafiktreiber läd, weiter nix.
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum