Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: bash: laat proces doorgaan nadat de terminal sluit [Solved]  (gelezen 889 keer)

Offline peer

  • Lid
bash: laat proces doorgaan nadat de terminal sluit [Solved]
« Gepost op: 2021/10/08, 17:09:02 »
Ik gebruik een startscript om windscribe vpn op te starten en en stopscript om windscribe vpn te stoppen.
Aan het einde van het startscript plaats ik een icon in de system-tray als volgt:
# icon in system tray aanzetten
file="/home/peer/Scripts/windscribe/pidofyad.txt"
(yad --notification \
    --image="network-wireless-hotspot-symbolic" \
    --command="clicked=true'") &
jobs -l
disown -h %1       
Dit werkt prima, echter wanneer de terminal gesloten wordt verdwijnt ook de icon uit de systray. En het is juist de bedoeling dat de icon zichtbaar blijft totdat ik het stopscript start.
Met google heb ik gevonden dat ik het commando disown moet gebruiken maar ik krijg het niet werkend.
de parameter -h moet ervoor zorgen dat dhet proces doorloopt als de terminal gesloten wordt en de %1 verwijst naar het jobnumber (er is hier maar één job).
Ik heb het ook geprobeerd met het commando nohub maar dan wordt de icon niet weergegeven.

Doe ik iets niet goed of gaat dit gewoon niet werken?????? 
« Laatst bewerkt op: 2021/10/10, 14:08:31 door peer »

Offline MKe

  • Lid
Re: bash: laat proces doorgaan nadat de terminal sluit
« Reactie #1 Gepost op: 2021/10/08, 17:21:10 »
Je hebt ook het nohub commando. Een andere manier om een shell open te houden terwijl je de window sluit is m.b.v screen of tmux.


Edit: niet goed gelezen, je had nohub al geprobeerd. Als ik jou was zou ik me eens inlezen in gnu-screen. Je kan daar heel veel mee en een van de dingen is dit.

Een nog betere oplossing lijkt me om een systemd script te maken. Waarom doe je dat niet?
« Laatst bewerkt op: 2021/10/08, 17:24:21 door MKe »
Mijn blokkendoos blog: http://mke21.wordpress.com/

Offline peer

  • Lid
Re: bash: laat proces doorgaan nadat de terminal sluit
« Reactie #2 Gepost op: 2021/10/08, 18:52:37 »
gnuscreen heb ik even naar gekeken maar loop ik nog niet warm voor. Het moet toch gewoon kunnen in bash??
Een systemd script heb ik nog nooit gemaakt maar het lijkt een mooie oplossing te zijn als ik mijn vpn altijd aan wil hebben maar dat is niet zo. Soms wil ik de vpn aanzetten maar soms ook niet.

Er moet iets mis zijn in mijn script waardoor het niet lukt. Momenteel had ik de haakjes om het yad-commando nodig om het naar de achtergrond te kunnen verplaatsen. Misschien werk het niet door de haakjes. Morgen maar eens het hele commando op één regel plaatsen.

Een alternatief is om naast een startscript en een stopscript ook een monitorscript te maken, waar het yad-command in zit.
Of gewoon één script dat alles doet. Kan ook, maar dan heb ik altijd een terminal openstaan

Offline MKe

  • Lid
Re: bash: laat proces doorgaan nadat de terminal sluit
« Reactie #3 Gepost op: 2021/10/08, 20:20:12 »
Het kan niet “gewoon in bash” aangezien een process wordt afgesloten als het parent process (lees terminal window) wordt afgesloten. Nohup kan je process los maken van dat parent process. Screen houdt een terminal proces verborgen in stand.  Het is een zeer gebruikelijke methode om te doen wat jij hier wilt. Systemd is wel degelijk geschikt. Je kunt daar namelijk gewoon processen mee starten en stoppen. Dat hoeven dus geen processen te zijn die automatisch starten.  Bijkomend voordeel is dat systemd je proces monitored en eventueel herstart als het gecrashed is.

Offline MKe

  • Lid
Re: bash: laat proces doorgaan nadat de terminal sluit
« Reactie #4 Gepost op: 2021/10/09, 08:19:36 »
Ik zat nog eens te denken. DVTM had een aparte sessie manager die best goed werkte, abduco http://manpages.ubuntu.com/manpages/xenial/en/man1/abduco.1.html. Omdat DVTM de succless filesofie aanhangt kun je deze tool los installeren zonder alle dependency meuk. Misschien is dat wat je zoekt?

Offline peer

  • Lid
Re: bash: laat proces doorgaan nadat de terminal sluit
« Reactie #5 Gepost op: 2021/10/09, 09:49:57 »
@mke, fijn dat je meedenkt. Ik ga eerst nog eens proberen of het met nohup mogelijk kan zijn (eenvoudig beginnen en dan uitbreiden). Ik wil eerst zeker zijn dat wat ik wil niet lukt. Gevoelsmatig heb ik gewoon iets niet helemaal goed gedaan.
Als dat niet lukt ga ik eens goed kijken naar de alternatieve methoden die jij noemt.

Offline Bloom

  • Lid
Re: bash: laat proces doorgaan nadat de terminal sluit
« Reactie #6 Gepost op: 2021/10/09, 10:26:20 »
Als alleen yad in de achtergrond moet blijven draaien, hoef je alleen een & op het einde van de regel toe te voegen. De ronde haakjes errond zorgen dat het in een subshell wordt uitgevoerd. Dat is vaak onnodig.
Andere methodes zijn nohup (maar heb je dat goed gebruikt?) en gnu-screen. Dat laatste moet je eerst opstarten in een terminal en daarna kun je je script starten met een & erachter en blijft het ook draaien als je de terminal afsluit. Om in een nieuwe terminal of ssh-sessie het draaiende programma terug te roepen gebruik je Ctrl+A vraagteken.
Ziehier een Nederlandstalige uitleg voor Screen: https://nl.joecomp.com/how-use-linux-screen
Een alternatief voor Screen is tmux, dat is een wat modernere en krachtigere variant van Screen.

Offline peer

  • Lid
Re: bash: laat proces doorgaan nadat de terminal sluit
« Reactie #7 Gepost op: 2021/10/09, 10:48:34 »
Weer een stapje verder. Het werkt nu zoals ik het wil.
# icon in system tray aanzetten
file="/home/peer/Scripts/windscribe/pidofyad.txt"
nohup yad --notification \
    --image="network-wireless-hotspot-symbolic" \
    --command="clicked=true'" &
pidofYad="$!"
nohup echo $pidofYad > $file

#echo "Press any key to continue"
#read -n1 answer
Ik heb nohup twee keer gebruikt. De eerste keer was nodig om yad te laten doorlopen als de terminal afgesloten wordt.
De tweede keer heb ik het bij de de opdracht gebruikt waar ik het pid van yad opsla in een file. Maar deze tweede keer rondt de eerste nohup ook goed af (denk ik) zodat yad inderdaad blijft doorlopen als de terminal afgesloten wordt. De laatste twee regels zijn nu niet meer nodig.

Offline Bloom

  • Lid
Re: bash: laat proces doorgaan nadat de terminal sluit
« Reactie #8 Gepost op: 2021/10/09, 11:39:47 »
Maak eerst een scriptje dat in de achtergrond moet draaien:
File="$1"
yad --notification --image --image='network-wireless-hotspot-symbolic'  --command='clicked=true'
echo $(pidof yad) >$File
En dat roep je dan aan vanuit het  aanroepscript (dat maar één keer aangeroepen wordt):
# icon in system tray aanzetten
doyad "/home/peer/Scripts/windscribe/pidofyad.txt" &
# klaar!

Offline Bloom

  • Lid
Re: bash: laat proces doorgaan nadat de terminal sluit
« Reactie #9 Gepost op: 2021/10/09, 11:48:19 »
Als yad (ik ken dat zelf niet) niet zelf terugkomt, moet er nog een & achteraan om het zelf eerst in de achtergrond te draaien.

Offline peer

  • Lid
Re: bash: laat proces doorgaan nadat de terminal sluit
« Reactie #10 Gepost op: 2021/10/09, 15:43:50 »
@bloom:
jouw suggestie werkt ook!! Mooi