最高の Bash セッションでタイムアウトのある標準出力を印刷する「at」または「sleep」ユーティリティの作成

最高の Bash セッションでタイムアウトのある標準出力を印刷する「at」または「sleep」ユーティリティの作成

現在の時間(たとえば、タイムアウト)より2時間前に一連のコマンドを実行したいと思います。

  1. このコマンドがタイムアウトした場合は、Bashを定期的に使用する必要があります(つまり、このコマンドはバックグラウンドで実行する必要があります&)。

  2. 最後に、コマンドの標準出力をすべてのセッションの階層で最も高いセッション端末に印刷する必要があります。


私がこれをしたい理由:

セキュリティ上の理由から、PHPmyadmin(PMA)をインストールし、2時間後に削除するスクリプトの一部としてこれを行う必要があります。このソリューションは、情報セキュリティの分野の多くの人々が私にお勧めしました。一部は、ポート3306フィルタリングと組み合わせてHTTPSを追加することもあります。


最初は解決策のようです。

sleepまたは、ユーティリティを使用してコマンドタイムアウトを設定できますat。以下を参照してください。

cat << EOF
sudo nohup sleep 2h
echo "hello"
echo "welcome"
EOF

または:

cat << EOF | sudo at 'now + 2 hours'
echo "hello"
echo "welcome"
EOF

これらの方法の問題(事実):

問題は、これらのコマンドがバックグラウンドで実行されず、標準出力が階層内で最も高いセッションの端末に印刷されないことです。


メモ:

  • 「最も高いセッション」、「階層内で最も高いセッション」、または「最初のセッション」と言うことは、誤ってまたは意図的にセッションウィンドウを閉じること(または他の同様の理由でコマンドの元のセッションが失われる可能性があることを強調するを行うためのものです。 突然の再起動) 損失または 2 分の停電)、この場合、セッション階層の最初のセッションである別のセッションを開始できます。今後コマンドの時間制限は2時間です。

ベストアンサー1

Linux は、デバイスからリポジトリまでファイル形式でttyすべてを処理します。

したがって、出力を次のファイルに送信することをお勧めしますtty

cat << EOF | sudo at 'now + 2 hours' | tee /var/tmp/at_output.log
echo "hello"
echo "welcome"
less /var/tmp/at_output.log
EOF

今やるべきことは、スクリーンセッションやcatやtailなどのテキストビューアを介して出力ファイルを表示することだけです。

たとえば、tail -f /var/log/at_output.log現在実行するttyと、最後の10行から始まるリアルタイム出力が表示されます。

また、切り替え時に見ることもできます。screenまず、次のものを作成する必要があります。

screenセッションタイプを作成するには:screen -S at_proc

コマンドの実行を中断せずに接続と切断を可能にし、履歴を保持して中断することなくコマンドを実行できるscreenポータブルセッションを表示します。tty

screenセッションを切断するには、ctrl++aをクリックしますd

セッションに再接続するには、を入力し、screen -r at_proc唯一のセッションである場合を入力しますscreen -r

画面セッションが終わったら、再接続して通常のように+キーをexit押します。ctrldtty

おすすめ記事