最初の5つの位置を除くすべての「at」位置を削除します。

最初の5つの位置を除くすべての「at」位置を削除します。

最初の5つのスケジュールされたジョブ(たとえば、最も低い5つのジョブID番号)のみを保持し、残りのスケジュールされたatqジョブを削除したいと思います。どうすればいいですか?

答え1

私のDebianシステムでは、タスクatは指定された順序ではなくスケジュールされた開始時間に基づいてソートされますat

$ for i in 10 20 30 40 50 60 70; do 
    at now + "$i" min < scripts/foo.sh; sleep 1; 
done
warning: commands will be executed using /bin/sh
job 8 at Sat Apr 18 15:31:00 2015
warning: commands will be executed using /bin/sh
job 9 at Sat Apr 18 15:41:00 2015
warning: commands will be executed using /bin/sh
job 10 at Sat Apr 18 15:51:00 2015
warning: commands will be executed using /bin/sh
job 11 at Sat Apr 18 16:01:00 2015
warning: commands will be executed using /bin/sh
job 12 at Sat Apr 18 16:12:00 2015
warning: commands will be executed using /bin/sh
job 13 at Sat Apr 18 16:22:00 2015
warning: commands will be executed using /bin/sh
job 14 at Sat Apr 18 16:32:00 2015

$ atq
9   Sat Apr 18 15:41:00 2015 a terdon
11  Sat Apr 18 16:01:00 2015 a terdon
10  Sat Apr 18 15:51:00 2015 a terdon
12  Sat Apr 18 16:12:00 2015 a terdon
8   Sat Apr 18 15:31:00 2015 a terdon
14  Sat Apr 18 16:32:00 2015 a terdon
13  Sat Apr 18 16:22:00 2015 a terdon

見てわかるように、atタスクは実行される順序で番号が付けられていますが、明らかにランダムな順序でリストさatqれています。

  1. リストされている最初の5つのジョブを削除するには、atq次のようにします。

    atrm $(atq | head -5 | cut -f 1)
    
  2. 開始順序に従って最初の5つのジョブを削除するには、次の手順を実行します。

    atrm $(atq | sort -n | head -5 | cut -f 1)
    

答え2

これは最初の5つを削除するので間違っています。ヘッドスタンド(ヘッド取り外し)を実行する方法がわかったら、答えを得ることができます。wcとの組み合わせでtailこれを行うことができます。

atq | sort -g  | head -5 | cut -f1 | xargs atrm

正解

atq | sort -g  | tail -n +6 | cut -f1 | xargs atrm

関連情報