ubuntuusers.de

Shellskript im Hintergrund permanent ausführen

Status: Gelöst | Ubuntu-Version: Ubuntu 16.04 (Xenial Xerus)
Antworten |

m.g.o.d

Anmeldungsdatum:
18. November 2019

Beiträge: 29

Hallo Zusammen,

mein erster Thread hier ☺ und ich bin auch noch ganz neu in Linux Ubuntu!

Ich hätte eine Frage an euch:

Ich habe ein shellskript geschrieben, was ein ganz simples watchfolder Skript ist und alle Dateien mit einer bestimmen Dateiendung (mp3, odt, pdf usw) vom Desktop und aus dem Verzeichnis /Firefox/downloads in die entsprechenden Ordner kopiert. Also *.mp3 nach home/Musik, .odt & .pdf nach /home/Dokumente usw. Ganz einfach und funktionell.

Nun möchte ich dieses Skript immer ausführen. Daher habe ich die Syntax in einer Endlosschleife geschrieben while true, do...done. Führe ich dieses Skript in der Befehlszeile mit ./watchfolder.sh aus, macht es was es soll.

In dem Moment, wo ich das Skript in den Hintergrund ausführbar mache, also ./watchfolder.sh &, dann wird eine PID vergeben, aber das Skript funktioniert nicht mehr...ich habe das Terminal noch offen gehabt :-/

Könnte mir jemand sagen, warum das nicht so funktioniert? Ich sehe das die PID auch etwas Rechenspeicher benutzt (1, 2 %) aber machen tut es nix mehr. Ich habe dem Skript mit chmod 777 eigentlich alle Rechte gegeben.

Wie kriege ich es hin, das dass Skript im Hintergrund läuft und funktioniert? Im nächsten Schritt will ich es dann in den "autostart" packen. Aber dazu sollte es erstmal so gehen.

Ich würde mich total über ein paar Tips freuen.

Viele Grüße, Marc

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14314

m.g.o.d schrieb:

In dem Moment, wo ich das Skript in den Hintergrund ausführbar mache, also ./watchfolder.sh &, dann wird eine PID vergeben, aber das Skript funktioniert nicht mehr...ich habe das Terminal noch offen gehabt :-/

Teste mal auch mit nohup, screen und tmux. Das Terminal kannst Du auch schließen.

https://wiki.ubuntuusers.de/Shell/Prozesssteuerung/

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13177

m.g.o.d schrieb:

mein erster Thread hier ☺ und ich bin auch noch ganz neu in Linux Ubuntu!

Herzlich willkommen hier im Forum!

In dem Moment, wo ich das Skript in den Hintergrund ausführbar mache, also ./watchfolder.sh &, dann wird eine PID vergeben, aber das Skript funktioniert nicht mehr...ich habe das Terminal noch offen gehabt :-/

Liest das Skript irgendwo von Stdin?

Wie kriege ich es hin, das dass Skript im Hintergrund läuft und funktioniert? Im nächsten Schritt will ich es dann in den "autostart" packen. Aber dazu sollte es erstmal so gehen.

Erst mal würde ich an nohup denken. Generell würde ich das aber so machen, dass das Skript die Endlosschleife nicht enthält. Dann kann man es auch viel leichter mit Cron pder Systemd integrieren. Plus, wenn es aus irgendwelchen Gründen terminiert wird, dann ist die Version mit der Endlosschleife komplett weg. Wenn Du die Schleife aber "außen rum" (z.B. durch Cron) baust, wird es robuster.

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

Hallo!

Kannst du das Script vllt posten? Dann können die Bash-Gurus hier mehr sagen.

Ansonsten: Teste doch mal die Einträge innerhalb des Scriptes in eine Logdatei. Einfaches Beispiel:

1
2
3
4
5
6
7
#!/bin/bash

while :
do
  sleep 5;
  echo "$(date +%Y_%m_%d_%H:%M:%S) Ich laufe im Hintergrund" >> /home/$USER/hintergrundscript.log;
done

dirkolus

Anmeldungsdatum:
17. Mai 2011

Beiträge: 2176

Wohnort: dahoam

m.g.o.d schrieb:

In dem Moment, wo ich das Skript in den Hintergrund ausführbar mache, also ./watchfolder.sh &, dann wird eine PID vergeben, aber das Skript funktioniert nicht mehr...ich habe das Terminal noch offen gehabt :-/

da fehlt noch ein bg, um den angehaltenen (!) Job auch weiter auszuführen. einfach in die offene Shell tippen.

Cranvil

Anmeldungsdatum:
9. März 2019

Beiträge: 990

dirkolus schrieb:

da fehlt noch ein bg, um den angehaltenen (!) Job auch weiter auszuführen.

Wenn ich einen Befehl mit abschließendem & ausführe, wird es in der Regel automatisch im Hintergrund weiter ausgeführt.

Dein Tipp passt nach meiner Erfahrung eher zu den Fällen, in denen man einen Vordergrundprozess mit STRG+Z anhält und ihn dann eben mit bg im Hintergrund weiter ausführen lässt.

dirkolus

Anmeldungsdatum:
17. Mai 2011

Beiträge: 2176

Wohnort: dahoam

Oops, das stimmt. Sorry, das hatte ich übersehen, dass Ctrl-Z gar nicht im Spiel war.

m.g.o.d

(Themenstarter)

Anmeldungsdatum:
18. November 2019

Beiträge: 29

Hi Zusammen,

erstmal vielen Dank für die vielen Antworten! Ich habe eine Sleepfunktion von einer Minute in die Dauerschleife eingebaut, der Grund warum es scheinbar nicht funktionierte, was wahrscheinlich, das er so oft es geht die ganzen Befehle ausgeführt hat, und das muss ja nicht sein.

Mit einer Minute Sleep funktioniert alles wunderbar.

Ich habe das Skript dann einfach unter "Start up Applications" angegeben und nach den Neustart läuft das Skript ganz von selbst im Hintergrund ☺

Vielen Dank für eure ganzen Hinweise.

Besten Gruß, Marc

Cranvil

Anmeldungsdatum:
9. März 2019

Beiträge: 990

Ärgerlich, dass ich nicht eher daran gedacht habe, aber dein Anwendungsfall schreit nach inotify oder sogar Incron, wobei ersteres wohl erst einmal reichen dürfte. 😉

Das dürfte zu einer deutlichen Entlastung des Systems führen, da eben nicht andauernd oder zumindest jede Sekunde das gesamte Verzeichnis übertragen wird (oder zumindest durchgegangen werden muss, um die richtigen Dateien zu kopieren), sondern nur jedes Mal, wenn ein passendes Ereignis eintritt.

m.g.o.d

(Themenstarter)

Anmeldungsdatum:
18. November 2019

Beiträge: 29

Cranvil schrieb:

Ärgerlich, dass ich nicht eher daran gedacht habe, aber dein Anwendungsfall schreit nach inotify oder sogar Incron, wobei ersteres wohl erst einmal reichen dürfte. 😉

Das dürfte zu einer deutlichen Entlastung des Systems führen, da eben nicht andauernd oder zumindest jede Sekunde das gesamte Verzeichnis übertragen wird (oder zumindest durchgegangen werden muss, um die richtigen Dateien zu kopieren), sondern nur jedes Mal, wenn ein passendes Ereignis eintritt.

Danke. Ich schaue mir beides gerne an. VG

Antworten |