Посмотрите на `at` вывод до его завершения

8

Допустим, я запускаю скрипт atна Linux (пример ниже), который, как я знаю, займет несколько часов или, может быть, даже несколько дней. Я привык atпосылать электронную почту с выводом команды после ее завершения, но что если я захочу посмотреть текущий вывод до его завершения? Давайте также предположим , я уже запустить сценарий и забыл перенаправить вывод , используя tail, teeили другие подобные методы , и не хотят , чтобы остановить скрипт. Есть ли в любом случае, чтобы сделать это?

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, упс Peek будет то, что я хотел напечатать. Я хочу посмотреть, что он делает.
Дрю Чапин
Перенаправить вывод сценария в файл, когда вы запланируете на работу и tail -fэтот файл?
Муру
@muru, давайте представим, что я уже запустил скрипт без использования tailи не хочу его останавливать.
Дрю Чапин
Я должен был бы проверить, но будет ли изменение сценария для использования 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
Вы, сэр, мой герой! Это сработало отлично!
Дрю Чапин
4
Я хотел бы добавить, что если вы знаете, что вы выполняете только одну atработу. Вам даже не нужен PID. Вы можете просто запустить, sudo ls /var/spool/cron/atspoolи теоретически это должен быть единственный файл.
Дрю Чапин
0

Другой способ определить, какой файл буфера принадлежит вашей работе, - получить номер задания atq.

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

Преобразовать номер задания в гекс. например, 38 (dec) = 26 (hex).

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

Ваш файл будет называться буквой очереди (в 99% случаев a), за ним будет шестизначный шестнадцатеричный идентификатор задания (я узнал об этом, просматривая исходный код 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
Дрю Чапин
источник