Я хочу начатьtmuxпри загрузке на raspberry pi - 2. Я написал session.sh
файл и поместил его в ~/bin/
файл, который находится в домашнем каталоге. Это ~/bin/
также включено в $PATH
и, следовательно, может быть запущено.
Файл Bash выглядит так:
#!/bin/sh
mySession(){
tmux new-session -d -s SessionName
tmux new-window -d -n 'windowName' "~/bin/myPythonScript.py"
}
mySession
exit 0
Я далисполнениеправа на все скрипты, включая вышеупомянутый скрипт bash, также использующийchmod +x session.sh
вrc.местныйЯ ссылаюсь на запуск этого файла следующим образом:
#!/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.местныйфайл:
(scriptSession)&>>/var/log/myLog.txt
но cat /var/log/myLog.txt
ничего не появляется и скрипт все равно не работает
решение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 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 окна
Первоначальный — это просто пустой сеанс, вызванный
tmux new-session -d -s sess1
и еще один из
tmux new-window
команды, который можно открыть с помощью CTRL++ B, 1так как он был упомянут какsess1:1
(примечание:Горячие клавиши могут различаться для разных пользователей, горячие клавиши tmux по умолчанию (bindkeys) - CTRL+ B)
Вывод
Если скрипт завершается с ошибкой, в окне будет показано, где в моем случае произошла ошибка (ошибки в моем скрипте Python), а внизу будет показаноПанель мертва. Поэтому из-за ошибок в сценарииtmuxсеанс был завершен без предоставления какого-либо соответствующего журнала (обратной связи), поэтому в вышеупомянутом журнале не было зарегистрировано никаких выходных данных/tmp/tmux.log
Поэтому всегда рекомендуется использовать set-remain-on-exit on
при запуске скриптов с tmux в случае возникновения ошибок в скрипте в отсоединенном режиме.
решение2
Я думаю, что rc.local
среда во время запуска не богата. Если она знает что-либо $PATH
и $HOME
(shell расширяется ~
до $HOME
), то это не ваши (обычного пользователя) переменные; я думаю, что они могут быть не установлены. Более того, скрипт унаследует эту ограниченную среду.
Однако когда вы это делаете sudo /etc/rc.local
или sudo ~/bin/session.sh
команда наследуеттвойокружающая среда и все работы.
Чтобы исправить это, используйте полный путь вместо ~/
. Используйте полный путь tmux
также.