
私はUbuntu 16.04を使用しており、特定のケースでは満足できずエラーが発生するtmux
ため、タイムアウトのあるプロセスを実行したいので、次の解決策が必要です(結合時に)。現在としては独自の機能があるので最善の選択のようです。sleep
at
nohup
nohup-sleep
tmux
ちょっと待ってメカニズムであり、実際に手動で使用するとかなりうまく機能します。 (私はすでに手動で実行できるプロセス自動化についてのみ尋ねています。)
私は必要です:
次の3つのタスクをすべて一度に実行する方法が必要です。
- 新しい
tmux
セッションを接続します。 - そのセッションに準備されたコマンドセットを挿入します
(sleep 30m ; rm -rf dir_name ; exit)
。たとえば、私は特に1つの長い行ではなく複数の行セットが好きです。 tmux
上記のコマンドを実行すると、新しいセッションの標準入力に書き込まれます。
つまり、tmux
この目的のために特別に作成された別のセッションでコードセットを実行したいのですが、これらすべてを1回の操作で実行します。
メモ:
私の目標は、最初の作業セッション(ほとんどの時間を作業に費やすセッション)からすべての作業を完了することです。一般的に言えば、新しく作成されたセッションにアクセスする意図はなく、自動化されたコードを使用してセッションを作成したいだけです。
可能であればheredocソリューションを好みます。私はこれが最も効果的だと思います。
答え1
実行したいコードを次のように配置すると、/opt/my_script.sh
必要な操作を簡単に実行できます。
tmux new-session -d -s "myTempSession" /opt/my_script.sh
これにより、「myTempSession」という新しい分離セッションが開始され、スクリプトが実行されます。後で追加して、実行中の作業を確認できますtmux attach-session -t myTempSession
。
それ私の考えでは、これは最もシンプルでエレガントなソリューションです。 tmuxを使用してstdin(「ここから」を読む)からコマンドを実行する簡単な方法がわかりません。ハッキングを使用すると、そうすることもできますが、それでもハッキングです(そしてハッキングのように見えます)。
例えば、上記で提案したコマンドを使用して所望の動作をシミュレートするハッキングがある。 (= heredocの新しい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
答え2
また見てくださいhttps://serverfault.com/questions/339390/run-command-in-detached-tmux-session使用例キーを送信ウィンドウからコマンドを外します。
答え3
上記の解決策を混ぜて同じ結果を得るための別の方法を考えました(bash仮定)。
#!/bin/bash
wantTmuxExecute() {
sleep 30m ;
rm -rf dir_name ;
...
}
# send to tmux
type wantTmuxExecute | tail -n +2 > /dev/shm/wantInTmux.sh
# execute tmux
tmux new-session -d 'source /dev/shm/wantInTmux.sh ; rm /dev/shm/wantInTmux.sh'
tmux send-keys 'wantTmuxExecute'