web-dev-qa-db-ja.com

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

私はUbuntu 16.04を使用していて、次のtmuxソリューションが必要です。これは、sleepで満足できず、atでバグが発生したため(Nohup-sleepを組み合わせた場合)、Nohupでタイムアウトプロセスを実行したいためです。今、tmuxは独自のno-hangupメカニズムを備えており、実際に手動で正常に動作しているため、最善の代替手段と思われます(手動で実行できるプロセスの自動化に関してのみ質問します) )。

私が必要なもの:

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

  1. 新しいtmuxセッションをアタッチします。
  2. (sleep 30m ; rm -rf dir_name ; exit)のように、準備が整った一連のコマンドをそのセッションに注入する。私は特に、複数行のセットを優先します。1つの長い行ではありません。
  3. 上記のコマンドを実行すると、終了した瞬間に、新しいtmuxセッションでstdinとして書き込まれます。

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


ノート:

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

  • できれば、ヒアドキュメントの解決策をお勧めします。最も効率的だと思います。

13
user149572

あなたが実行したいコードを例えば/opt/my_script.sh、必要なことを簡単に実行できます。

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

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

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

たとえば、上記のコマンドを使用して必要な動作をシミュレートするハックです(=ヒアドキュメントから新しい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
18
Mario Vitale

send-の使用例については、 https://serverfault.com/questions/339390/run-command-in-detached-tmux-session も参照してください。 keys 切り離されたペインでのコマンド。

1
user3751385