Я хочу запустить tmux при загрузке на Raspberry Pi - 2. Я написал файл session.sh и поместил его в ~/bin/ file, который находится в домашнем каталоге. Этот ~/bin/ также включен в $PATH и, следовательно, может быть запущен.

Файл Bash выглядит так:

#!/bin/sh

mySession(){
     tmux new-session -d -s SessionName
     tmux new-window -d -n 'windowName' "~/bin/myPythonScript.py"
}
mySession

exit 0

Я дал права выполнения всех сценариев , включая упомянутый выше Баш скрипт тоже с помощью chmod +x session.sh

В rc.local я ссылаюсь на запуск этого файла следующим образом:

#!/bin/sh
scriptSession(){
        echo "starting the tmux session"
        ~/bin/session.sh &
}

scriptSession
exit 0

Я много раз пытался перезагрузить свой Pi, но сессия никогда не запускалась.

когда я запускаю sudo tmux ls , он просто показывает error Connecting to Server

однако когда я делаю sudo /etc/rc.local или sudo ~/bin/session.sh сессия начинается! Я не хочу, чтобы это происходило, так как я хочу, чтобы автоматический запуск при загрузке не инициировал пользовательский сеанс

Любая идея, в чем может быть проблема?

редактировать

Я также попытался собрать журнал ошибок в подоболочке bash, используя в файле rc.local следующее :

(scriptSession)&>>/var/log/myLog.txt

но после cat /var/log/myLog.txt ничего не появляется и скрипт все равно не работает

2 ответа2

1

Наиболее оптимизированное решение для устранения неполадок любого отдельного сценария, использующего tmux , потребует от вас использования следующей опции в вашем сценарии запуска:

#!/bin/bash
# this script is called "sess"

tmux new-session -d -s sess1

# this statement is a life-saver for tmux detached sessions
tmux set-option -t sess1 set-remain-on-exit on

# In my case running the script in a new window worked
tmux new-window -d -n 'nameofWindow' -t sess1:1 'sudo /home/pi/bin/script.py'

exit 0

Теперь из rc.local был вызван следующий скрипт, и Pi был перезагружен. В конце концов при перезагрузке, когда вы присоединяете сеанс с помощью sudo tmux a Once получает сеанс tmux с 2 окнами

  1. Начальный - просто пустой сеанс, запускаемый из-за tmux new-session -d -s sess1

  2. и еще один из команды tmux new-window который можно открыть с помощью CTRL + B + 1, поскольку он упоминается как sess1:1 (примечание: горячие клавиши могут различаться для пользователя, по умолчанию горячие клавиши tmux (bindkeys) - CTRL + B).)

вывод

Если скрипт завершается с ошибкой, окно покажет вам, где была ошибка в моем случае ошибки в моем скрипте Python, а в нижней части он покажет, что Pane is Dead. Следовательно, из-за ошибок в сценарии сеанс tmux был завершен без предоставления какого-либо соответствующего журнала (обратной связи), следовательно, в вышеупомянутом /tmp/tmux.log не было зарегистрировано ни одного вывода

Поэтому всегда рекомендуется использовать set-remain-on-exit on при запуске сценариев с tmux на случай, если в сценарии в отдельном режиме есть ошибки

0

Я думаю, что среда rc.local при запуске не богата. Если он знает , что любой $PATH и $HOME (оболочка расширяется ~ до $HOME они не ваши (обычного пользователя) переменные; Я думаю, что они могут быть сброшены. Кроме того, сценарий унаследует эту ограниченную среду.

Однако, когда вы делаете sudo /etc/rc.local или sudo ~/bin/session.sh команда наследует вашу среду и все работает.

Чтобы исправить это, используйте полный путь вместо ~/ . Используйте также полный путь к tmux .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .