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


34

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

回答:


39

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 

おそらくそれを行うためのより短い方法があります、私はちょうどそれを頭から取り出しました:)


7
at -c $(atq | cut -f 1)またはfor each in $(atq | cut -f 1)、「jobidが見つかりません」エラーを回避します。(また、Bashにはfor ((each=1; each<=MAXJOB; each++))必要がありませんseq。ポータビリティに関心がある場合は、#!/bin/sh。)
さらに通知があるまで一時停止します。

古き良きを忘れないでくださいawkatq | awk '{ system("at -c " $1) }'
norcalli

7

以前の応答に基づいて、これは各ジョブの行をリストし、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

4

より簡単なアプローチ:

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

2

atqcこのためのコマンドを作成しました( "atq with command")。バッシュ関数。これを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"';}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.