
screen / tmuxなどのソリューションが必要な場合(プロセスを長時間実行してもnohup
対話が必要な場合がないため) - 特定のシステムでscreen / tmuxを使用できず、screen / tmuxをインストールすることができない場合に発生します。解決策?
Q:これを達成するために(Linux / AIX /などで)普遍的に(または普遍的に)使用できる「短い」Perlスクリプトはありますか?
これが必要です:
- Perlスクリプトの起動
- 時間がかかる特定のタスクを開始する場合
- たとえば、仕事用ノートブックを閉じる必要があるため、ターミナルを切断します。
- コンソールに再接続画面と同様に実行される長期実行プロセスの表示/制御
そのようなPerlスクリプトを持っている人はいますか?
答え1
perl
IO::Pty
適切なモジュールが取り付けられていない場合は、最適ではない可能性があります。
まず、時間がかかる特定のタスク(gtttlt)がパイプとうまく機能する場合、おそらく複雑なことは必要ありません。
mkfifo input
nohup gtttlt <> input > output 2>&1 &
開始gtttlt
(名前付きパイプから入力、通常ファイルとして出力)。だからあなたは添付次に変更してください:
tail -f output & cat > input
expect
配管が機能せず、端末が必要な場合は、疑似端末を起動する項目(例:、zsh
s zpty
、perl
's、IO::Pty
または次)を使用する必要がありますsshd
。
mkfifo input
nohup ssh -tt localhost gtttlt <> input > output 2>&1
そして添付:
stty raw -echo; tail -f output & cat > input
screen
これはまたは実装とは異なりますtmux
。screen
そして、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」提案の代わりに、以下を好みます。
- 通常どおりPerlスクリプト "perl script.pl"を起動します。
- ユーザー対話操作を実行し、時間がかかる部分に到達します。
- ctrl + zを押してバックグラウンドにして「bg」と入力します。これで、プロセスはバックグラウンドで実行されています。
- 「タスク」を実行してプロセス数を確認してください。おそらく1.
- 現在の端末からプログラムを切り離すには、「disown %1」を実行します。
- これで端末を安全に閉じることができます(「終了」と入力するか、閉じるボタンを押してください)。
また、出力をファイルまたは名前付きパイプにリダイレクトできます。残念ながら、プロセスを端末に再接続する方法はないようです。