tmux 放在 rc.local 時不會觸發

tmux 放在 rc.local 時不會觸發

我想開始一個多路復用器在樹莓派上啟動 - 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

在裡面本地文件我指的是觸發該文件如下:

#!/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.localsudo ~/bin/session.sh會議開始時!我不希望發生這種情況,因為我希望在啟動時自動啟動而不是用戶觸發的會話

知道可能是什麼問題嗎?

編輯

我還嘗試使用以下內容在 bash 子 shell 中收集失敗日誌本地文件文件:

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

但沒有cat /var/log/myLog.txt任何顯示,腳本仍然失敗

答案1

使用最優化的解決方案對任何分離的腳本進行故障排除多路復用器將要求您在觸發腳本中使用以下選項:

#!/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 已重新啟動。最終在重新啟動時,當您使用 Once 附加會話時sudo tmux a獲取 tmux 會話2 個窗戶

  1. 最初的會話只是由於以下原因觸發的空會話tmux new-session -d -s sess1

  2. 另一個來自tmux new-window命令,可以使用CTRL+ B+打開1,因為它被提到為sess1:1(筆記:熱鍵可能因使用者而異,預設的 tmux 熱鍵(綁定鍵)是CTRL+ B

推理

如果腳本以錯誤結束,視窗將顯示錯誤所在的位置(在我的例子中,Python 腳本中的錯誤),並在底部顯示窗格已死。因此,由於腳本中的錯誤多路復用器會話退出時沒有給出任何相關日誌(回饋),因此上述內容中沒有記錄任何輸出/tmp/tmux.log

因此,始終建議在使用set-remain-on-exit ontmux 運行腳本時使用 ,以防分離模式下的腳本出現錯誤

答案2

我認為rc.local啟動時的環境並不豐富。如果它知道任何$PATHand $HOME(shell 擴展~$HOME),它們就不是您(普通用戶)的變數;我認為他們可能沒有設定。此外,腳本將繼承這個有限的環境。

但是,當您這樣做sudo /etc/rc.localsudo ~/bin/session.sh命令繼承時你的環境和所有工程。

要修復它,請使用完整路徑而不是~/.也使用完整路徑tmux

相關內容