Mac: Führen Sie den Bildschirmbefehl von launchctl aus

770
Sean Coonce

Ich habe ein Python-Skript, das ich auf einem Mac beim Systemstart in einer separaten Bildschirmsitzung ausführen möchte.

Die Python-Datei ( foo.py):

import time import datetime  while True: print 'hello', datetime.datetime.now() time.sleep(2) 

Das Shell-Skript, das es aufruft ( run_foo.sh):

#!/bin/bash username=`whoami` _python=`which python` screen -dm -S run_foo $_python /Users/$username/foo.py 

Die Plist, die das Shell-Skript aufruft: https://gist.github.com/cooncesean/6617008

===========

Das Python-Skript läuft einwandfrei:

> python foo.py hello 2013-09-18 21:20:22.132170 hello 2013-09-18 21:20:24.133420 hello 2013-09-18 21:20:26.134697 ... 

Das Shell-Skript, das das Python-Skript aufruft, kann problemlos von alleine ausgeführt werden:

> sh run_foo.sh There is a screen on: 1922.run_foo (Detached) 1 Socket in /var/folders/4z/0413fcs523l8nz12xbvng0bh0000gn/T/.screen.  > screen -r run_foo hello 2013-09-18 21:24:57.243103 hello 2013-09-18 21:24:59.244349 

Beim Laden der Plist (die das Shell-Skript aufruft, das den Bildschirm erstellt und das Python-Skript ausführt), verbleibt mir eine Dead-Screen-Sitzung, die gelöscht werden muss.

> launchctl load ~/Library/LaunchAgents/start-foo.plist  > screen -list There is a screen on: 1951.run_foo (Dead ???) Remove dead screens with 'screen -wipe'. 1 Socket in /var/folders/4z/0413fcs523l8nz12xbvng0bh0000gn/T/.screen. 

UPDATE: Es scheint, dass Sie mit launchd keinen Daemon aufrufen können (in diesem Fall screen) und eine Ausnahme auslöst. Wie startet man also eine Bildschirmsitzung beim Start auf einem Mac? Crontab?

1

0 Antworten auf die Frage