View previous topic :: View next topic |
Author |
Message |
Christian99 Veteran
Joined: 28 May 2009 Posts: 1721
|
Posted: Wed Jun 15, 2011 8:52 am Post subject: skript frage |
|
|
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 |
|
|
Max Steel Advocate
Joined: 12 Feb 2007 Posts: 2272 Location: My own world! I and Gentoo!
|
Posted: Wed Jun 15, 2011 9:00 am Post subject: |
|
|
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
___________________
Heim-PC: AMD Ryzen 5950X, 64GB RAM, GTX 1080
Laptop: Intel Core i5-4300U, 16GB RAM, Intel Graphic
Arbeit-PC: Intel i5-1145G7, 16GB RAM, Intel Iris Xe Graphic (leider WSL2) |
|
Back to top |
|
|
py-ro Veteran
Joined: 24 Sep 2002 Posts: 1734 Location: Velbert
|
Posted: Wed Jun 15, 2011 9:32 am Post subject: |
|
|
nohup vor dem Skript sollte auch schon genügen.
Py |
|
Back to top |
|
|
Christian99 Veteran
Joined: 28 May 2009 Posts: 1721
|
Posted: Wed Jun 15, 2011 11:02 am Post subject: |
|
|
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 |
|
|
py-ro Veteran
Joined: 24 Sep 2002 Posts: 1734 Location: Velbert
|
Posted: Wed Jun 15, 2011 11:20 am Post subject: |
|
|
nein, aber du könntest AFAIK einen {} in der Shell mit nohup verwenden
Code: | nohup { foo && bar && blub} |
|
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6780
|
Posted: Wed Jun 15, 2011 10:23 pm Post subject: |
|
|
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 |
|
|
schmutzfinger Veteran
Joined: 26 Oct 2003 Posts: 1287 Location: Dresden/Germany
|
Posted: Thu Jun 16, 2011 9:16 pm Post subject: |
|
|
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 |
|
|
Christian99 Veteran
Joined: 28 May 2009 Posts: 1721
|
Posted: Fri Jun 17, 2011 12:06 pm Post subject: |
|
|
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 |
|
|
|
|
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
|
|