UNIXの世界でscreen / tmuxをPerlに置き換えますか?

UNIXの世界でscreen / tmuxをPerlに置き換えますか?

screen / tmuxなどのソリューションが必要な場合(プロセスを長時間実行してもnohup対話が必要な場合がないため) - 特定のシステムでscreen / tmuxを使用できず、screen / tmuxをインストールすることができない場合に発生します。解決策?

Q:これを達成するために(Linux / AIX /などで)普遍的に(または普遍的に)使用できる「短い」Perlスクリプトはありますか?

これが必要です:

  1. Perlスクリプトの起動
  2. 時間がかかる特定のタスクを開始する場合
  3. たとえば、仕事用ノートブックを閉じる必要があるため、ターミナルを切断します。
  4. コンソールに再接続画面と同様に実行される長期実行プロセスの表示/制御

そのようなPerlスクリプトを持っている人はいますか?

答え1

perlIO::Pty適切なモジュールが取り付けられていない場合は、最適ではない可能性があります。

まず、時間がかかる特定のタスク(gtttlt)がパイプとうまく機能する場合、おそらく複雑なことは必要ありません。

mkfifo input
nohup gtttlt <> input > output 2>&1 &

開始gtttlt(名前付きパイプから入力、通常ファイルとして出力)。だからあなたは添付次に変更してください:

tail -f output & cat > input

expect配管が機能せず、端末が必要な場合は、疑似端末を起動する項目(例:、zshs zptyperl's、IO::Ptyまたは次)を使用する必要がありますsshd

mkfifo input
nohup ssh -tt localhost gtttlt <> input > output 2>&1

そして添付:

stty raw -echo; tail -f output & cat > input

screenこれはまたは実装とは異なりますtmuxscreenそして、tmux端末エミュレータを実装します。再接続すると、端末エミュレータの画面内容が表示されます。ここで再接続すると、出力の最後の10行だけが表示されます(オプションをに渡して-n 123調整できますtail)。すべてのデータをホスト端末とやり取りするだけです。

答え2

まさにあなたが要求したわけではありませんが、私はしばしばatそうします。私はしばしばラップトップからリモートサーバーに対してコマンドを実行し、コマンド出力を失うことなくラップトップをシャットダウンしようとします。at指定した時間にジョブを開始でき、ジョブ出力とエラーストリームをファイルに簡単にリダイレクトできます。

たとえば、実行したい場合は、次のような小さなファイルをmy_script.pl作成しますfoo.txt

my_script.pl > out 2>er

その後実行

$ at now < foo.txt

その後、サーバーからログアウトしてラップトップを自宅に持ち込んだ後、サーバーにログインして次のコマンドを実行sshして出力を確認できます。

$ tail -f er

または

$ tail -f out

atシェルからアクションを提供することもできます(CtrlD終了するにはクリック)。

$ at now
warning: commands will be executed using /bin/sh
at> my_script.pl > out 2>er
at> <EOT>
job 10 at Thu Sep  5 00:39:00 2013

答え3

上記の「at」提案の代わりに、以下を好みます。

  1. 通常どおりPerlスクリプト "perl script.pl"を起動します。
  2. ユーザー対話操作を実行し、時間がかかる部分に到達します。
  3. ctrl + zを押してバックグラウンドにして「bg」と入力します。これで、プロセスはバックグラウンドで実行されています。
  4. 「タスク」を実行してプロセス数を確認してください。おそらく1.
  5. 現在の端末からプログラムを切り離すには、「disown %1」を実行します。
  6. これで端末を安全に閉じることができます(「終了」と入力するか、閉じるボタンを押してください)。

また、出力をファイルまたは名前付きパイプにリダイレクトできます。残念ながら、プロセスを端末に再接続する方法はないようです。

関連情報