Mengintip `at` output sebelum selesai

8

Katakanlah saya menjalankan skrip dengan atdi Linux (contoh di bawah) yang saya tahu akan memakan waktu beberapa jam, atau bahkan mungkin beberapa hari. Saya terbiasa atmengirim email dengan output dari perintah setelah selesai, tetapi bagaimana jika saya ingin mengintip output saat ini sebelum selesai? Mari kita asumsikan saya sudah menjalankan skrip dan lupa untuk mengarahkan ulang output menggunakan tail, teeatau metode serupa lainnya dan tidak ingin menghentikan skrip. Apakah ada cara untuk melakukan ini?

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
Drew Chapin
sumber
puncak atau mengintip? Anda ingin melihat apa yang dilakukannya saat melakukannya?
Journeyman Geek
@JourneymanGeek, Ups. Mengintip akan menjadi apa yang saya maksudkan untuk mengetik. Saya ingin melihat apa yang dilakukannya.
Drew Chapin
Mengarahkan output skrip ke file saat Anda menjadwalkan pekerjaan dan tail -ffile itu?
muru
@muru, Mari kita berpura-pura sudah menjalankan skrip tanpa menggunakan taildan tidak ingin menghentikannya.
Drew Chapin
Saya perlu menguji tetapi apakah memodifikasi skrip untuk menggunakan tee, dan menyimpan output ke file, lalu membaginya?
Journeyman Geek

Jawaban:

9

Jika pekerjaan telah dimulai, dan Anda memiliki beberapa cara untuk mendapatkan PID dari pekerjaan itu, Anda bisa melihat di mana atmenyimpan output:

$ 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

Seperti yang Anda lihat, hasilnya disimpan ke file temp, yang sekarang dapat Anda periksa:

$ sudo tail -f /var/spool/cron/atspool/a0000701795998
Subject: Output from your job        7
To: muru

Anda perlu sudokarena direktori yang berisi tidak dapat diakses oleh dunia (setidaknya di 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
muru
sumber
1
Anda Tuan, adalah pahlawan saya! Itu bekerja dengan sempurna!
Drew Chapin
4
Saya ingin menambahkan, bahwa jika Anda tahu Anda hanya menjalankan satu atpekerjaan. Anda bahkan tidak membutuhkan PID. Anda cukup menjalankan sudo ls /var/spool/cron/atspooldan seharusnya, secara teori menjadi satu-satunya file di sana.
Drew Chapin
0

Cara lain untuk menentukan file spool mana yang menjadi milik pekerjaan Anda adalah untuk mendapatkan nomor pekerjaan atq.

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

Ubah nomor pekerjaan menjadi hex. misal 38 (dec) = 26 (hex).

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

File Anda akan diberi nama Antrian surat (99% dari waktu, itu a) diikuti oleh 5 digit hex job id (Saya belajar ini dengan melihat melalui kode sumber dari atperintah).

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

Maka Anda dapat melihat stdout

drew@sokar:~$ sudo less /var/spool/cron/atspool/a0002601856a0f
Drew Chapin
sumber