tmux не срабатывает при размещении в rc.local

tmux не срабатывает при размещении в rc.local

Я хочу начать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 aOnce, получает сеанс tmux с2 окна

  1. Первоначальный — это просто пустой сеанс, вызванныйtmux new-session -d -s sess1

  2. и еще один из 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также.

Связанный контент