완료하기 전에`at` 출력을 엿보기 또한 이미 스크립트를 실행했고 tail, tee또는 다른

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



답변

작업이 시작되었고 해당 작업의 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


답변

작업에 속하는 스풀 파일을 판별하는 다른 방법은에서 작업 번호를 얻는 것입니다 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


답변