Mac: запустить экранную команду из launchctl
У меня есть скрипт 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? кронтаб?
0 ответов
Я смог заставить это работать, собрав по кусочкам несколько разных ответов [1][2][3].
Я создал сценарий для запуска моей экранной команды следующим образом:
#!/usr/bin/env bash
screen -dmS MySessionName $SHELL
screen -S MySessionName -p 0 -X stuff "myprogram"$'\n'
затем сохранил это как
.sh
файл и запустил
chmod a+x
в теме. В Finder я использовал
Cmd-I
чтобы установить Terminal.app в качестве способа открытия по умолчанию
.sh
тип файлов. Затем просто перейдите в Системные настройки-> Пользователи и учетные записи-> Элементы входа, нажмите
+
и добавьте файл.
Рекомендации: