起動時にtmuxスクリプトを起動できません。

起動時にtmuxスクリプトを起動できません。

以下に説明するように、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 asudo tmux ls

ただし、起動時に実行されないため起動時にトリガされない場合、その目的は役に立ちません。

$PATH実際にどの環境変数が表示されるのかを確認しました/home/pi/bin

また、環境変数がソートされない可能性があるため、すべてのスクリプトでtmuxへのフルパスを試してみました。しかし幸運はありません。

$ which tmux
$ /usr/bin/tmux

皮肉なことに、私は私の言葉に従ってUbuntu 14.04 LTSrc.local私のファイルを介してノートブックスクリプトがトリガーされます。

もっと選択

  1. たぶんデーモンスクリプトを試してみてください。 anとaがこれを処理できるかどうかinit.d/わからないと、デーモンも処理できない可能性があります。rc.localcrontab

  2. ~/.tmux.confaがいいかわかりません。

ベストアンサー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.localPiが再起動されます。最後に、再起動時にOnceを使用してセッションを接続すると、sudo tmux atmuxセッションが作成されます。窓2つ

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

  2. もう1つはtmux new-windowコマンドから出て、次のようにCTRL++を使用Bして開くことができます。1sess1:1メモ:ショートカットはユーザーごとに異なる場合があり、デフォルトのtmuxショートカット(キーバインディング)はCTRL+ですB

推理

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

set-remain-on-exit onしたがって、分離モードのスクリプトでエラーが発生した場合に備えて、tmuxを使用してスクリプトを実行するときは常にお勧めします。

おすすめ記事