Shell Script pausiert nach Logout

F

fetcher

Neues Mitglied
Thread Starter
Dabei seit
16.04.2012
Beiträge
11
Reaktionspunkte
0
Hallo liebes Forum,
ich habe ein Problem unter macOS - Mojave. Es geht darum, dass mein ShellScript welches ein PythonScript aufruft nach ca. 5min Inaktivität einfach pausiert bzw. stoppt. Nach erneuter Anmeldung läuft es einwandfrei wieder weiter.

Das Script läuft im Hintergrund als Daemon mit:
caffeinate -i /usr/bin/nohup python listen.py > /dev/null 2>&1 (Wartet auf eingehende Verbindungen, TCP Socket)

Ich greife über die Bildschirmfreigabe auf das Gerät zu. Sobald ich die Bildschirmfreigabe geschlossen habe ca. 1min danach pausiert es, obwohl ich caffeinate davor gesetzt habe.

Frage:
Gibt es eine Möglichkeit macOS mitzuteilen, bestimmte Prozesse weiterlaufen zu lassen? Apache läuft ja auch problemlos weiter.

Vielen Dank für die Hilfe
fetcher
 
warum startest du das nicht über launchd?
dort kannst ja auch optionen zur prozess überwachung einstellen.

sonst halt statt mit nohup mal über screen laufen, auch wenn es vielleicht keine ausgabe hat.
 
Hallo,
danke für deine Antwort.

Meinst du mit launchd eine .plist Datei erstellen? Und dann mit "launchctl load" laden? Da gibt es diesen key:
<key>KeepAlive</key>

Ist es das?
 
  • Gefällt mir
Reaktionen: win2mac
Vielen Dank! Eine Frage hätte ich da noch...

Muss ich dort als Programm das ShellScript angeben oder direkt das PythonScript, was ja der eigentliche Prozess ist?
Das ShellScript regelt nur das starten und stoppen..Ist doch dann richtig python direkt anzugeben oder?
 
voller pfad zu python und als argument voller pfad zu script.py
oder dein script.py hat chmod +x und korrekte einträge im shebang, dann reicht voller pfad zu script.py.
 
Zuletzt bearbeitet:
Hallo nochmal und vielen Dank für die Hilfe.
Ich habe jetzt eine funktionierende .plist erstellt die sich in
"/Library/LaunchDaemons"

Der Inhalt sieht folgendermaßen aus:
-------------------------------------

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">

<dict>

<key>KeepAlive</key>

<dict>

<key>NetworkState</key>

<true/>

</dict>

<key>Label</key>

<string>de.test.servercontrol</string>

<key>ProgramArguments</key>

<array>

<string>/Applications/serverControl/listen.py</string>

</array>

<key>RunAtLoad</key>

<true/>

<key>StandardOutPath</key>

<string>/var/log/test.log</string>

<key>StandardErrorPath</key>

<string>/var/log/test.log</string>

<key>UserName</key>

<string>root</string>

</dict>

</plist>

Problem besteht:
Leider habe ich immer noch das Problem, wenn ich die Bildschirmfreigabe schließe ca. 3min danach ist der Dienst pausiert.
Sobald ich mich wieder von meinem iMac aus auf den Mac-Mini verbinde (da reicht das öffnen schon aus, ohne das ich mich anmelde) läuft er wieder.
Mir ist auch aufgefallen, dass der Mac-Mini kurz "klickert" und dann die Festplatten hochfahren, sobald ich eine Verbindung über die Bildschirmfreigabe aufbaue.

Ich glaube seit dem Mojave Update hat sich da was geändert bin mir aber nicht ganz sicher.

Frage:
Könnte man die .plist Datei irgendwie als System Dienst deklarieren unter /System/Library/LaunchDaemons ? Oder Mojave irgendwie mitteilen das die Netzwerkverbindung nicht runterfahren soll
bei Inaktivität?

Vielen Dank und ein schönes Wochenende!
fetcher




 
du musst wohl noch ein StartInterval dazu packen, damit den auch ständig am laufen hält.
 
Ich glaube das Problem gelöst zu haben :)
Bin in Systemeinstellungen -> Energie sparen gegangen und habe dort den Haken "Automatisches Aktivieren des Computerruhezustands bei ausgeschaltetem Display außer Kraft setzen" gemacht.
Hoffe mal das der Mac-mini jetzt nicht sonderlich viel mehr Energie verbraucht oder schneller kaputt geht :) .

Mir ist dabei noch aufgefallen das diese Option erst mit dem Update "macOS 10.14.5" gekommen ist, da auf meinem iMac (10.14.4) der Satz gar nicht steht.

Update:
Das mit dem StartInterval werde ich ausprobieren. Danke!

Viele Grüße
fetcher
 
startinterval ist IMHO nicht relevant (und läuft eh' seit geraumer zeit nicht mehr richtig). er hat ja runatload + keepalive.

wenn die kiste natürlich einschläft, ist der fehler ja gefunden. :p
 
Zurück
Oben Unten