web-dev-qa-db-ja.com

atジョブの内容を印刷するにはどうすればよいですか?

atを使用していくつかのジョブがスケジュールされているDebianボックスがあります。 atqを使用して、時間とともにジョブを一覧表示できることはわかっていますが、/var/spool/cron/atjobsを覗く以外に、ジョブの内容を印刷する方法はありますか?

41
che

at -c jobnumberは単一のジョブをリストします。それらすべてを表示したい場合は、次のようなスクリプトを作成します。

#!/bin/bash
MAXJOB=$(atq | head -n1 | awk '{ print $1; }')
for each in $(seq 1 $MAXJOB); do echo "JOB $each"; at -c $each; done 

おそらくそれを行うにはもっと短い方法があるでしょう、私はちょうどそれを私の頭から飛び出させました:)

41

以前の応答に基づいて、これはatqからの各ジョブの行をリストし、ジョブ番号とスケジュールされた時間を示し、次に実行されるコマンドのみを(ジョブ番号ではなく)時系列でソートします。

for j in $(atq | sort -k6,6 -k3,3M -k4,4 -k5,5 |cut -f 1); do atq |grep -P "^$j\t" ;at -c "$j" | tail -n 2; done

生産、例えば.

48  Fri Mar 10 15:13:00 2017 a root
/usr/local/bin/a-command

47  Fri Mar 10 15:14:00 2017 a root
/usr/local/bin/another-command
8
palilicium

よりシンプルなアプローチ:

for j in $(atq | cut -f 1); do at -c "$j"; done

lessのそれぞれを順番に確認することもできます。

for j in $(atq | cut -f 1); do at -c "$j" | less; done
4
Wildcard

このためのコマンドatqcを作成しました( "atq with command")。 bash関数。これをbashコマンドライン(ターミナルコマンド)で実行します。または、それを~/.bashrcファイルに入れて、後で使用できるようにします。

atqc () { atq|Perl -ne'($q,$j)=/((\d+).*)/;qx(at -c $j)=~/(marcinDEL\w+).\n(.*?)\n\1/s;print"$q $2"'; }

試して:

atqc

これは、at -Vバージョン3.1.13のRHEL7で機能します。

at -Vバージョン3.1.18を含むUbuntu 16.04のat -c Nの出力形式は少し異なるため、私のUbuntuサーバーでは次のように動作します。

atqc(){ atq|Perl -nE'($q,$j)=/((\d+).*)/;qx(at -c $j)=~/\n}\n(.*?)\s*$/s;say"$q: $1"';}
2
Kjetil S.

これは、このスレッドの他のアプローチと同様ですが、awkをさらに使用した代替アプローチです。

atq | awk '{ print "at -c " $1 }' | bash

「ドライラン」を実行して何が実行されるかを確認するには、最後から「| bash」の部分を削除するだけです。

1
presto8