Script neu starten sobald screen beendet?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
lemon1337
Beiträge: 31
Registriert: 20.07.2013 15:55:32

Script neu starten sobald screen beendet?

Beitrag von lemon1337 » 31.08.2015 14:14:28

Hallo
ich habe ein node.js script und der startbefehl sieht wie folgt aus:

Code: Alles auswählen

screen -S script node script.js
gibt es eine möglichkeit, dass ganze automatisch neu zu starten sobald die screen session beendet wird?

Liffi
Beiträge: 2345
Registriert: 02.10.2004 01:33:05

Re: Script neu starten sobald screen beendet?

Beitrag von Liffi » 31.08.2015 14:22:14

Du könntest ein while drumpacken, dass das ganze, evtl. mit Verzögerung, wieder ausführt.

uname
Beiträge: 12399
Registriert: 03.06.2008 09:33:02

Re: Script neu starten sobald screen beendet?

Beitrag von uname » 31.08.2015 14:25:38

Eigentlich sollte Debianscreen oder Debiantmux ja gerade nie beendet werden (also detachen statt beenden). Eine Prüfung wäre wohl eher dann doppelt.

lemon1337
Beiträge: 31
Registriert: 20.07.2013 15:55:32

Re: Script neu starten sobald screen beendet?

Beitrag von lemon1337 » 31.08.2015 14:41:51

Liffi hat geschrieben:Du könntest ein while drumpacken, dass das ganze, evtl. mit Verzögerung, wieder ausführt.
und wie?

Liffi
Beiträge: 2345
Registriert: 02.10.2004 01:33:05

Re: Script neu starten sobald screen beendet?

Beitrag von Liffi » 31.08.2015 14:45:26

lemon1337 hat geschrieben:
Liffi hat geschrieben:Du könntest ein while drumpacken, dass das ganze, evtl. mit Verzögerung, wieder ausführt.
und wie?
Z.B. so:

Code: Alles auswählen

while true; do
screen -S script node script.js && sleep 60;
done

uname
Beiträge: 12399
Registriert: 03.06.2008 09:33:02

Re: Script neu starten sobald screen beendet?

Beitrag von uname » 31.08.2015 14:47:42

Vielleicht auch ohne sleep falls keine Verzögerung notwendig:

Code: Alles auswählen

while :; do screen -S script node script.js; done
Um das trotzdem zu beenden am besten den Screen-Prozess (ps, pstree -p) suchen und dann den Vaterprozess (Shell) killen.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Script neu starten sobald screen beendet?

Beitrag von Cae » 31.08.2015 14:55:35

Cronjob mit

Code: Alles auswählen

$ screen -list | grep -qE '^\W[0-9]+\.script' || screen -S script ...
? Das daemliche grep da braucht es, weil screen -list grundsaetzlich mit 1 returnt, egal, ob das optionale Argument etwas gemacht hat oder nicht:

Code: Alles auswählen

$ (screen -ls nix; echo ret=$? >&2) | wc -l
ret=1
2
$ (screen -ls test; echo ret=$? >&2) | wc -l
ret=1
4
$ 
Beim zweiten Aufruf gibt es offensichtlich einen auf test matchenden Screen, aber der Rueckgabewert ist trotzdem nicht null.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

uname
Beiträge: 12399
Registriert: 03.06.2008 09:33:02

Re: Script neu starten sobald screen beendet?

Beitrag von uname » 31.08.2015 14:57:55

Etwas offtopic:
Ich nutze mittlerweile für echte interaktive virtuelle Terminals lieber Debiantmux mit folgendem Aufruf in ~/.bash_profile:

Code: Alles auswählen

if [ -z $TMUX ];   then
  /usr/bin/tmux attach || /usr/bin/tmux new
fi
und folgenden ~/.tmux.conf (CTRL a statt CTRL b)

Code: Alles auswählen

set-option -g prefix C-a

lemon1337
Beiträge: 31
Registriert: 20.07.2013 15:55:32

Re: Script neu starten sobald screen beendet?

Beitrag von lemon1337 » 31.08.2015 15:07:29

uname hat geschrieben:Vielleicht auch ohne sleep falls keine Verzögerung notwendig:

Code: Alles auswählen

while :; do screen -S script node script.js; done
Um das trotzdem zu beenden am besten den Screen-Prozess (ps, pstree -p) suchen und dann den Vaterprozess (Shell) killen.
das sieht ja schonmal super aus, aber als was genau speicher ich das? einfach .sh oder wie?
ok einfach als sh
nur das mit dem killen kriege ich nicht so ganz hin
ps gibt 19812 pts/1 00:00:00 bash aus
wenn ich kill 19812 mache passiert aber nichts
Zuletzt geändert von lemon1337 am 31.08.2015 15:15:09, insgesamt 1-mal geändert.

uname
Beiträge: 12399
Registriert: 03.06.2008 09:33:02

Re: Script neu starten sobald screen beendet?

Beitrag von uname » 31.08.2015 15:09:17

Einfach unter /usr/local/bin/programmname mit den Rechten 755 ablegen.

Antworten