У меня есть скрипт Python, который я хотел бы запустить на Mac при запуске системы в отдельном сеансе экрана.
Файл Python (foo.py
):
import time
import datetime
while True:
print 'hello', datetime.datetime.now()
time.sleep(2)
Скрипт оболочки, который его вызывает (run_foo.sh
):
#!/bin/bash
username=`whoami`
_python=`which python`
screen -dm -S run_foo $_python /Users/$username/foo.py
Плист, который вызывает сценарий оболочки: https://gist.github.com/cooncesean/6617008
===========
Скрипт Python работает нормально сам по себе:
> 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
...
Сценарий Shell, который вызывает скрипт Python, работает самостоятельно:
> 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
Загрузка plist (который вызывает скрипт оболочки, который создает экран и запускает скрипт Python) оставляет мне сеанс мертвого экрана, который необходимо стереть.
> 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.
ОБНОВЛЕНИЕ: кажется, что launchd не позволяет вам вызывать демон (в данном случае screen
) и вызывает исключение. Итак, как начать сеанс экрана при запуске на Mac? кронтаб?