以下に説明するように、tmuxトリガースクリプトが実行されています。ラズベリーパイウィッジ7.10:
ステップ1
#!/bin/bash # this script is called "sess" tmux new-session -d -s sess1 'sudo /home/pi/bin/myscript.py' exit 0
実行中のスクリプトを次のように確認しました。
- まず、Pythonスクリプトを実行
sudo /home/pi/bin/myscript.py
してから、次のように入力します。マルチプレクサコマンドは上記と同じですtmux new-session -d -s sess1 'sudo /home/pi/bin/myscript.py'
。スクリプトが2回実行されます。
ユーザーがこのスクリプトを入力して実行できる場合は、内容全体をbashスクリプトとして作成できると仮定するのが安全です。だから上記の「sess」スクリプトは
- ステップ2
以下を介してファイルに対する実行権限を付与しました。chmod +x /home/pi/bin/sess
- ステップ3
rc.local
また、次のようにスクリプトを実行してみました。
# in the rc.local file
/home/pi/bin/sess &
exit 0
私が設定した後、rc.local
ファイルがトリガーされます。無線LAN私のPiがAd-Hocネットワークに参加できるように、起動時のパラメータです。
ssh
私はPiに入ることができるので、これをはっきりと確認できます。
観察結果:
再起動後、スクリプトはトリガーされません。これはtmux ls
次のコマンドで確認できますConnection to Server Failed
。また、スーパーユーザーがincaseを使用してtmuxセッションを持っていることを確認しましたが、sudo tmux ls
出力は同じです。
- ステップ4
以下を使用してスクリプトを実行しようとしていますcrontab
。
sudo crontab -u pi -e
## inside the crontab
@reboot /home/pi/bin/sess &
私も予約されたことスーパーユーザー向け
sudo crontab -e
@reboot /home/pi/bin/sess &
観察結果:
再起動後、スクリプトは実行されません。
- ステップ5
私サブシェルrc.local
トリガーされるスクリプトのすべてのアクティビティをキャプチャします。
# in the rc.local file
(/home/pi/bin/sess &) > /tmp/tmux.log
観察結果
再起動すると、cat /tmp/tmux.log
ファイルには何もありません。ファイルがtmux.log
実際に作成されました。
推論
皮肉sudo /etc/rc.local
なことに、私は実際に接続セッションを使用してリストを見ることができるので、ログインするとスクリプトはsudo ~/bin/sess
完全に実行されます。sudo tmux a
sudo tmux ls
ただし、起動時に実行されないため起動時にトリガされない場合、その目的は役に立ちません。
$PATH
実際にどの環境変数が表示されるのかを確認しました/home/pi/bin
。
また、環境変数がソートされない可能性があるため、すべてのスクリプトでtmuxへのフルパスを試してみました。しかし幸運はありません。
$ which tmux
$ /usr/bin/tmux
皮肉なことに、私は私の言葉に従ってUbuntu 14.04 LTS
rc.local
私のファイルを介してノートブックスクリプトがトリガーされます。
もっと選択
たぶんデーモンスクリプトを試してみてください。 anとaがこれを処理できるかどうか
init.d/
わからないと、デーモンも処理できない可能性があります。rc.local
crontab
~/.tmux.conf
aがいいかわかりません。
ベストアンサー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 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が再起動されます。最後に、再起動時にOnceを使用してセッションを接続すると、sudo tmux a
tmuxセッションが作成されます。窓2つ
最初のセッションは、次のためにトリガーされた空のセッションです。
tmux new-session -d -s sess1
もう1つは
tmux new-window
コマンドから出て、次のようにCTRL++を使用Bして開くことができます。1sess1:1
メモ:ショートカットはユーザーごとに異なる場合があり、デフォルトのtmuxショートカット(キーバインディング)はCTRL+ですB。
推理
スクリプトがエラーで終わると、ウィンドウはエラーが発生した場所(私の場合はPythonスクリプトのエラー)と下部に表示されます。ペインが死んだ。だからスクリプトのバグのためマルチプレクサ関連ログ(フィードバック)を指定せずにセッションが終了するため、上記の出力は記録されません。/tmp/tmux.log
set-remain-on-exit on
したがって、分離モードのスクリプトでエラーが発生した場合に備えて、tmuxを使用してスクリプトを実行するときは常にお勧めします。