@murmuringvoices
Звукорежиссер

Как сделать хороший автозапуск программы в линуксе?

Решил сделать себе небольшое окружение, чтобы учить python. Создал виртуальную машинку с убунтой, установил pyenv, там anaconda, ну и собственно IPython Notebook в ней.
Понял, что я хочу, чтобы сервер с IPython Notebook'ом у меня запускался при загрузке виртуальной машины, но при этом, чтобы он был не на фоне где-то, а чтобы к нему можно было приаттачиться и посмотреть что он говорит, какие ошибки выводит если что.
Сделал себе для этого очень кривое решение. Сделал автоматический логин в tty2 и добавил в .bashrc следующие строки:
if [ "$(tty)" = '/dev/tty2' ]; then tmux; fi
if [ -z "$(ps -e | grep 'jupyter-note')" ]; then [ -n "$TMUX" ] && command -v tmux >/dev/null && ./notebook.sh; fi

То есть скрипт сначала проверяет, находится ли он в терминале tty2, открывает tmux, потом в случае если notebook еще не запущен, но он находится в tmux'е - запускает скрипт стартующий IPython Notebook.
Минусы этого решения очевидны, не удастся попользоваться tmux'ом, если мне вдруг захочется с ним разобраться наконец, да и вообще как-то очень криво это выглядит. Плюс, что меня даже еще сильнее волнует, при выключении виртуальной машины IPython Notebook отрубается резко, совсем не так, как должен по идее.

Хочу спросить, какие есть другие хорошие способы сделать похожую вещь, чтобы при загрузке компьютера у меня запускалась программа, но при этом чтобы можно было к ней как-то приаттачиться?
И есть ли какие-то способы нормально её завершать перед выключением компьютера, ну, в смысле, не вручную?
  • Вопрос задан
  • 1946 просмотров
Решения вопроса 1
Supervisor: A Process Control System хороший инструмент для такого. рекомендую использовать его.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
mbeloshitsky
@mbeloshitsky
Вебдев, систем оперейшонс, ж.д. автоматика
Если по правильному, то в зависимости от того какая у вас убунта, вам нужно писать либо юнит к systemd, либо к upstart.

Для upstart это будет выглядеть примерно так ( /etc/init/ipython-notebook.conf)

# Запуcкаем программу в tty2
#
# Дополнительно нужно убедиться, что на tty2 больше ничего не стартует 
# (хорошей идеей будет прибить /etc/init/tty2.conf)
start on stopped rc RUNLEVEL=[2345]

stop on runlevel [!2345]

respawn
exec /usr/bin/setsid sh -c 'exec notebook.sh <> /dev/tty2 >&0 2>&1'


Полезная ссылочка unix.stackexchange.com/questions/170063/start-a-pr...
Ответ написан
@devel787
> Создал виртуальную машинку с убунтой
Можно не выключать виртуальную машину, а приостанавливать.
И не нужно будет ничего запускать при загрузке виртуальной машины.
А в 1-й раз можно запустить всё нужное в tmux или screen.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы