1

apt-get update && apt-get upgrade管理対象のすべてのシステムで同時に起動する、参加型アップグレードスクリプトがあります。理想的には、それらすべてをスクリーンセッション内で起動したいと思います。私がこのようにそれをするとき:

ファイル:upgrade.sh


for host in $ALLHOSTS
do
    some_commands_which_take_considerable_time
    screen -X screen sh -c "ssh $host \"apt-get update && apt-get upgrade\""
done

$ screen ./upgrade.sh

、動作しますが、セッションに新しいウィンドウが到着するため、それらは自動的に切り替えられます。代わりに、含まれているプロセスが終了するか、を使用して手動で切り替えない限り、アクティブウィンドウが修正されるバージョンが必要^A nです。

終了したプロセスを持つウィンドウを保持する可能性があるが、アクティブなプロセスを持つウィンドウからそれらを分離しておく可能性がある場合のボーナスポイント。

4

3 に答える 3

2

これはtmuxで行うことができます。例えば:

# Start a session named "apt-get" and leave it running in the background.
tmux session-new -d -s apt-get

# Preserve windows with inactive processes.
tmux set-option -t apt-get set-remain-on-exit on

# Start a new window without switching to it. You can also do this from
# within a running tmux session, not just outside of it.
tmux new-window -d -t apt-get -n upgrade-$host \
     "ssh $host 'apt-get update && apt-get upgrade'"

同じ名前のウィンドウを複数持つことも、一意の名前の-nフラグの引数を変更することもできることに注意してください。tmuxアプリケーションは気にしません。

例として、各ウィンドウに「アップグレード」という名前を付けることができますが、それではSSHセッションを一目で識別するのが難しくなります。代わりに、この例では、ホスト変数の値(forループによって入力される)を各ウィンドウ名に追加します。これにより、ナビゲートしやすくなり、関心のないウィンドウをプログラムで閉じることが容易になります。これは、終了したプロセスを表示する閉じられていないウィンドウが多数ある場合に特に役立ちます。

全体として、構文はこの種のタスクのGNU画面よりも少しクリーンで直感的ですが、マイレージは異なる場合があります。

于 2012-06-23T22:35:46.830 に答える
0

サブプロセスの終了後にウィンドウを保持しない場合、1つの可能性はzombie、画面構成ファイルでコマンドを呼び出すことです。これには、ウィンドウを強制終了または復活させる2つのキーボード文字をそれぞれ指定する必要があります。例えば:

zombie KR

次に、Kサブプロセスが終了したウィンドウを強制終了Rし、同じウィンドウでサブプロセスを再起動しようとします。ゾンビウィンドウでは、これらのキーはトップレベルでキャプチャされることに注意してください(つまり、通常の画面制御文字のプレフィックスシーケンスを前に付けないでください)。

新しく作成されたウィンドウに自動的に切り替わらないようにするには、画面の呼び出しを次のように変更してみてください。

screen -X eval 'screen sh -c "ssh $host \"apt-get update && apt-get upgrade\""' 'other'
于 2012-06-23T22:29:21.077 に答える
0

CodeGnomeのおかげで、screenでそれを行う方法はないと信じているので、おそらくtmuxを使用します(それは本当に残念です!)。

それがどのように使用されることができるかについてのより良いスケッチを与えるために:

#!/bin/sh

tmux new-session -d -s active
tmux new-session -d -s inactive
tmux set-option -t active set-remain-on-exit on

for host in $ALLHOSTS
do
    tmux new-window -d -t active: -n upgrade-$host "
        ./do_upgrade_stuff.sh $host
        tmux move-window -s active:upgrade-$host -t inactive:
    "
done
于 2012-06-24T11:59:11.450 に答える