現在の時間(たとえば、タイムアウト)より2時間前に一連のコマンドを実行したいと思います。
このコマンドがタイムアウトした場合は、Bashを定期的に使用する必要があります(つまり、このコマンドはバックグラウンドで実行する必要があります
&
)。最後に、コマンドの標準出力をすべてのセッションの階層で最も高いセッション端末に印刷する必要があります。
私がこれをしたい理由:
セキュリティ上の理由から、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