완료하기 전에`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

피크 또는 픽? 당신이하고있는 동안 무엇을하고 싶습니까?
Journeyman Geek

@JourneymanGeek, 죄송합니다. Peek는 내가 입력하려고하는 것입니다. 무슨 일인지보고 싶어요.
Drew Chapin 2012 년

작업 및 tail -f해당 파일 을 예약 할 때 스크립트 출력을 파일로 리디렉션 하시겠습니까?
muru

@muru, 내가 이미 사용하지 않고 스크립트를 실행하고 tail중지하고 싶지 않은 것처럼 가정 해 봅시다 .
Drew Chapin

테스트를해야하지만 티를 사용하도록 스크립트를 수정하고 출력을 파일에 저장 한 다음 작동하도록 조정 하시겠습니까?
Journeyman 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포함하는 디렉토리는 세계적으로 접근 할 수 없기 때문에 필요합니다 (적어도 우분투 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 2012 년

4
그래도 하나의 at작업 만 실행한다는 것을 알고 싶습니다 . PID가 필요하지 않습니다. 당신은 그냥 실행할 수 있으며 sudo ls /var/spool/cron/atspool이론적으로 유일한 파일이어야합니다.
Drew Chapin 2012 년

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

파일 이름은 Queue letter (시간의 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
                                              -----

그런 다음 stdout을 볼 수 있습니다

drew@sokar:~$ sudo less /var/spool/cron/atspool/a0002601856a0f
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.