tmux は rc.local に配置すると起動しません

tmux は rc.local に配置すると起動しません

私は始めたいtmuxラズベリーパイの起動時 - 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.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.localsudo ~/bin/session.shセッションが開始すると、ユーザーがトリガーするセッションではなく、起動時に自動的に開始したいので、これが起こることを望んでいません

何が問題なのでしょうか?

編集

私はまた、次のものを使用してbashサブシェルで失敗ログを収集しようとしました。rc.localファイル:

(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 aTmuxセッションが取得されます。2つの窓

  1. 最初のものは、単に空のセッションがトリガーされたものです。tmux new-session -d -s sess1

  2. そして、コマンドからもう一つは、(として言及されているので、++をtmux new-window使用して開くことができますCTRLB1sess1:1注記:ホットキーはユーザーによって異なる場合があります。デフォルトのtmuxホットキー(bindkeys)はCTRL+ですB

推論

スクリプトがエラーで終了した場合、ウィンドウにはエラーが発生した場所が表示されます。私の場合はPythonスクリプトのエラーで、下部に次のメッセージが表示されます。ペインは死んだそのため、スクリプトのエラーにより、tmuxセッションは関連するログ(フィードバック)を出力せずに終了したため、上記の出力は記録されませんでした。/tmp/tmux.log

set-remain-on-exit onしたがって、スクリプトに障害がある場合に備えて、tmuxでスクリプトを実行するときは常に を使用することをお勧めします。

答え2

rc.local起動時の環境は豊富ではないと思います。$PATHおよび$HOME(シェルは~に展開されます$HOME) がわかっている場合、それらは (通常のユーザーの) 変数ではありません。設定されていない可能性があります。さらに、スクリプトはこの制限された環境を継承します。

ただし、コマンドが継承するsudo /etc/rc.localsudo ~/bin/session.shあなたの環境とすべての作品。

これを修正するには、 の代わりにフルパスを使用します~/。 にもフルパスを使用しますtmux

関連情報