Зазирніть на вихідний результат, перш ніж він завершиться


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

пік чи пік? Ви хочете побачити, що він робить, поки це робить?
Подорожник Geek

@JourneymanGeek, На жаль. Пік - це те, що я мав намір набрати. Я хочу побачити, що це робить.
Дрю Чапін

Перенаправити вихід сценарію на файл, коли ви плануєте роботу та tail -fцей файл?
муру

@muru, давайте зробимо вигляд, що вже запустив сценарій без використання, tailі не хочу його зупиняти.
Дрю Шапін

Мені потрібно тестувати, але чи модифікував би скрипт для використання трійника і збереження виводу у файл, а потім його виправлення?
Подорожник Geek

Відповіді:


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
                                              -----

Тоді ви можете переглядати stdout

drew@sokar:~$ sudo less /var/spool/cron/atspool/a0002601856a0f
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.