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

Dre*_*pin 8 linux stdout at

假设我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
Run Code Online (Sandbox Code Playgroud)

mur*_*uru 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
Run Code Online (Sandbox Code Playgroud)

如您所见,输出已保存到临时文件中,您现在可以检查该文件:

$ sudo tail -f /var/spool/cron/atspool/a0000701795998
Subject: Output from your job        7
To: muru
Run Code Online (Sandbox Code Playgroud)

您需要,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
Run Code Online (Sandbox Code Playgroud)

  • 不过,我想补充一点,如果您知道自己只运行一项“at”工作。你甚至不需要PID。你可以只运行`sudo ls /var/spool/cron/atspool`,理论上它应该是那里唯一的文件。 (4认同)