在完成之前查看`at`输出


9

假设我运行一个脚本 at 在Linux上(下面的例子),我知道这将需要几个小时,甚至可能需要几天。我已经习惯了 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

高峰还是偷看?你想看看它做什么呢?
Journeyman Geek

@JourneymanGeek,哎呀。 Peek将是我打算输入的内容。我想看看它在做什么。
Drew Chapin

在计划at作业时将脚本输出重定向到文件 tail -f 那个文件?
muru

@muru,让我假装我已经运行了脚本而没有使用 tail 并且不想阻止它。
Drew Chapin

我需要测试但是会修改脚本以使用tee,并将输出保存到文件中,然后拖尾工作吗?
Journeyman Geek

Answers:


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 工作。你甚至不需要PID。你可以跑 sudo ls /var/spool/cron/atspool 理论上它应该是唯一的文件。
Drew Chapin

0

确定哪个假脱机文件属于您的作业的另一种方法是从中获取作业号 atq

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

将作业编号转换为十六进制。例如38(dec)= 26(十六进制)。

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

您的文件将被命名为队列字母(99%的时间,它是 a )后跟5位十六进制作业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 a 00026  01856a0f  ----- 

然后你可以查看标准输出

drew@sokar:~$ sudo less /var/spool/cron/atspool/a0002601856a0f
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.