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