Как запустить tmux в bash сразу после перезагрузки

Я создал скрипт для запуска после перезагрузки экземпляра Ubuntu.

crontab -e

Затем добавил это в скрипт:

@reboot /home/ubuntu/startup.sh

Вот как выглядит скрипт:

#!/bin/bash
tmux new-session -d -s my_server
tmux send-keys -t my_server:0 ". /home/ubuntu/venv/bin/activate" C-m
tmux send-keys -t my_server:0 "cd ~/canonicaliser_api" C-m
tmux send-keys -t my_server:0 "git checkout new-schema" C-m
tmux send-keys -t my_server:0 "git pull" C-m
tmux send-keys -t my_server:0 "cd ~/canonicaliser_api/canonicaliser/workers" C-m
tmux send-keys -t my_server:0 "python person_worker.py" C-m

После перезагрузки я делаю tmux attach чтобы увидеть результаты.

$ . /home/ubuntu/venv/bin/activate
cd ~/canonicaliser_api
(venv)$ (venv)$ git checkout new-schema
git pull
cd ~/canonicaliser_api/canonicaliser/workers
python person_worker.py
Already on 'new-schema'
Your branch is up-to-date with 'origin/new-schema'.
... 
7 files changed, 157 insertions(+), 20 deletions(-)
(venv)$ (venv)$ Traceback (most recent call last):
  File "person_worker.py", line 4, in <module>
    from app import create_app, log
ImportError: No module named app
(venv)$

Как ни странно, virtualenv, кажется, активируется, но, похоже, не сработал. Окружение кажется странным. Если я запускаю скрипт вручную (вместо перезагрузки) и делаю tmux attach, Я вижу (venv)ubuntu@ip-172-xx-xx-xxx: вместо просто (venv)$, Может ли это быть проблема?

1 ответ

Решение

Я наконец нашел причину.

Все, что мне нужно было сделать, это добавить путь Python следующим образом:

tmux send-keys -t my_server:0 "export PYTHONPATH=$PYTHONPATH:/home/ubuntu/canonicaliser_api" C-m

Теперь это работает. Надеюсь, что это помогает кому-то еще с аналогичными требованиями.

Другие вопросы по тегам