完了する前に「at」出力を確認する


8

atLinux(以下の例)でスクリプトを実行するとします。このスクリプトは、数時間または数日かかることもわかっています。atコマンドの出力が完了したらメールで送信することに慣れていますが、完了に現在の出力を確認したい場合はどうすればよいですか?また、スクリプトをすでに実行していてtailteeやその他の同様の方法を使用して出力をリダイレクトするのを忘れており、スクリプトを停止したくないと仮定します。とにかくこれを行うにはありますか?

drew@anubis:~$ at now
warning: commands will be executed using /bin/sh
at> ./myscript.sh
at> <EOT>
job 3 at Sat Jan  7 09:31:00 2017

ピークかピークか?あなたはそれをしている間それが何をしているのを見たいですか?
ジャーニーマンオタク

@JourneymanGeek、おっと。ピークは、私がタイプするつもりでした。私はそれが何をしているのかを見たいです。
Drew Chapin 2017年

atジョブとtail -fそのファイルをスケジュールするときにスクリプト出力をファイルにリダイレクトしますか?
muru

@muru、スクリプトを使用せずに既に実行していて、tail停止したくないとしましょう。
Drew Chapin 2017年

テストする必要がありますが、teeを使用するようにスクリプトを変更し、出力をファイルに保存して、動作を調整しますか?
ジャーニーマンオタク

回答:


9

ジョブが開始されていて、そのジョブのPIDを取得する方法がある場合atは、出力の保存先を確認できます。

$ at now
warning: commands will be executed using /bin/sh
at> sleep 10m
at> <EOT>
job 7 at Sat Jan  7 20:18:00 2017
$ pgrep sleep
7582
$ ls -l /proc/7582/fd
total 0
lr-x------ 1 muru muru 64 Jan  7 20:19 0 -> /var/spool/cron/atjobs/a0000701795998 (deleted)
lrwx------ 1 muru muru 64 Jan  7 20:19 1 -> /var/spool/cron/atspool/a0000701795998
lrwx------ 1 muru muru 64 Jan  7 20:19 2 -> /var/spool/cron/atspool/a0000701795998

ご覧のように、出力は一時ファイルに保存されています。これを確認できます。

$ sudo tail -f /var/spool/cron/atspool/a0000701795998
Subject: Output from your job        7
To: muru

sudo含んでいるディレクトリが誰でもアクセスできないために必要です(少なくともUbuntu 14.04では):

$ sudo namei -lx /var/spool/cron/atspool/a0000701795998
f: /var/spool/cron/atspool/a0000701795998
Drwxr-xr-x root     root   /
drwxr-xr-x root     root   var
drwxr-xr-x root     root   spool
drwxr-xr-x root     root   cron
drwxrwx--T daemon   daemon atspool
-rw------- muru     muru   a0000701795998

1
あなたは私のヒーローです!それは完璧に機能しました!
Drew Chapin

4
ただし、atジョブを1つだけ実行していることがわかっている場合は、付け加えておきます。PIDも必要ありません。あなたは単に実行することができsudo ls /var/spool/cron/atspool、それは理論的にはそこにある唯一のファイルであるべきです。
Drew Chapin 2017年

0

ジョブに属しているスプールファイルを特定する別の方法は、からジョブ番号を取得することatqです。

drew@sokar:~$ atq
38      Tue Jul 10 12:15:00 2018 = drew

ジョブ番号を16進数に変換します。例:38(dec)= 26(hex)。

drew@sokar:~$ printf "%x\n" 38
26

ファイルの名前は、キュー文字(99%の場合はa)の後に5桁の16進数のジョブIDが付けられます(これは、atコマンドのソースコードを調べてわかりました)。

drew@sokar:~$ sudo ls -l /var/spool/cron/atspool
total 55968
-rw------- 1 drew drew       49 Feb 16  2017 a0001c017a3cb2
-rw------- 1 drew drew 57297586 Feb 26  2017 a0001e017a7405
-rw------- 1 drew drew     2329 Jul 10 12:21 a0002601856a0f
                                              -----

次に、標準出力を表示できます

drew@sokar:~$ sudo less /var/spool/cron/atspool/a0002601856a0f
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.