新しいtmuxセッションでコードを実行する方法-現在のセッション内から?


13

私はUbuntu 16.04を使用tmuxsleepていますが、特定のケースで満足しておらずat、バグに遭遇したためnohup(タイムアウト時)にタイムアウトプロセスを実行したいため、次のソリューションが必要です(を組み合わせた場合nohup-sleep)。今、tmuxそれは独自のハングアップメカニズムを備えており、手動での使用で実際にうまく機能しているため、最良の選択肢のようです(私はすでにそれで手動で行うことができるプロセスを自動化することに関してのみ質問します)。

必要なもの:

次の3つのアクションをすべて1つの操作で実行する方法が必要です。

  1. 新しいtmuxセッションを接続します。
  2. のようなコマンドの準備が整ったセットをそのセッションに注入します(sleep 30m ; rm -rf dir_name ; exit)。私は特に、1行の長い行ではなく、複数行のセットを好みます。
  3. 上記のコマンドを実行すると、新しいtmuxセッションでstdinとして書き込まれることが終了した瞬間が設定されます。

言い換えると、tmuxその原因のために特別に作成された別のセッションでコードセットを実行したいが、1つの操作ですべてを実行したい。


ノート:

  • 私は元の作業セッション(ほとんどの時間から作業しているセッション)からすべてを行うことを目指しています。一般的に、新しく作成されたセッションにアクセスするつもりはありません。自動的に実行されるコードで作成したいだけです。

  • 可能であれば、heredocソリューションをお勧めします。私はそれが最も効率的だと思います。

回答:


18

実行したいコードを例えば/opt/my_script.shに置くと、あなたが望むことをするのはとても簡単です:

tmux new-session -d -s "myTempSession" /opt/my_script.sh

これにより、「myTempSession」という名前の新しい切り離されたセッションが開始され、スクリプトが実行されます。を実行することで、後でアタッチして、何をしているかを確認できtmux attach-session -t myTempSessionます。

私の意見では、これが最も簡単でエレガントなソリューションです。私は、tmuxを使用してstdinからコマンドを実行する簡単な方法(「from heredocs」を参照)を知りません。ハックすることでそれができるかもしれませんが、それでもハックのように見えます(そしてハックのように見えます)。

たとえば、ここに私はあなたが望む動作をシミュレート(=ヒアドキュメントから新しいtmuxのセッションでコードを実行する。テンポラリファイルが作成されるありません書き込みは、サーバーのハードドライブに発生した上記の提案のコマンドを使用していますハック/dev/shmです、 tmpfs):

(
  cat >/dev/shm/my_script.sh &&
  chmod +x /dev/shm/my_script.sh &&
  tmux new-session -d '/dev/shm/my_script.sh; rm /dev/shm/my_script.sh'
) <<'EOF'
    echo "hacky, but works"
EOF

1
親愛なるマリオ。あなたの答えを読むのはいつも楽しみです。正しいかどうかわからないので、間違っているかどうかを教えてください:1.2つの方法があります。1つは最初に一時的なスクリプト(コードを含む)を作成し、作成時に実行し、2つ目はheredocです仕方。2.2番目の方法が機能する場合(各エコー行にheredocの各コード行が含まれる場合)なぜそれがBashの有効なコードである場合、これをハックと見なすべきなのでしょうか?たぶん、ヒアドキュメントの行がエコーされ、ヒアドキュメントで定期的に実行されないのでしょうか?
-JohnDoea

2
@Beniaこれは、を持っている一部のUnixシステムでのみ動作するため、ハック/dev/shmです。また、単純なスクリプトを通常のファイルに書き込み、それをで開始するよりも複雑で、読み取り、理解、保守が難しいため、ハックでもありますtmux
クサラナンダ

1
@Kusalanandaが説明したように、コード実行のヒアドキュメントは一般的に悪い習慣です。Altくて手に負えない、それは動作しますが、それ以外の場合は非常に簡単なことを行う回り道を見つけることを強制します...答えの最初と2番目のコードブロックを比較するだけです:それがどのように動作するかわかりますか?それにはどれくらい時間がかかりますか?それはだ、より tmuxのは(私も検討していないだろう醜いので、偶数より-ハック方法のために保存)標準入力からコマンドを実行する方法がありませんように外部スクリプトがあり、ハックの唯一の(への答え1.の方法あなたの質問の) 。
マリオヴィターレ

1
申し訳ありませんが、最初のサンプルに間違いがありました(引数を使用する場合、「new-session」コマンドは暗示されません)。今では修正されています。
マリオヴィターレ

1
今実行するtmux new-session -d -s "myTempSession" /opt/my_script.shと、コードを貼り付けるための一時ファイルが開かれません...現在のセッションから直接スクリプトを開くか、少なくとも新しいセッションに移動してから直接戻る現在のセッション。ところで、私はあなたに感謝するためにできることは最小限であり、11時間で報奨金を与えることができるので、あなたのすべての援助に報奨金を与えるつもりです。
JohnDoea

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.