Xem trước đầu ra `at` trước khi hoàn thành


8

Giả sử tôi chạy một kịch bản với atLinux (ví dụ bên dưới) mà tôi biết sẽ mất vài giờ hoặc thậm chí nhiều ngày. Tôi đã quen với atviệc gửi email với đầu ra của lệnh sau khi hoàn thành, nhưng nếu tôi muốn xem lén đầu ra hiện tại trước khi hoàn thành thì sao? Chúng ta hãy cũng giả sử tôi đã chạy kịch bản và quên để chuyển hướng đầu ra sử dụng tail, teehoặc các phương pháp tương tự khác và không muốn dừng lại kịch bản. Có cách nào để làm điều này?

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

đỉnh hay nhìn trộm? Bạn muốn xem những gì nó làm trong khi nó làm điều đó?
Journeyman Geek

@JTHERmanGeek, Rất tiếc. Peek sẽ là những gì tôi có nghĩa là để gõ. Tôi muốn xem những gì nó đang làm.
vẽ Chapin

Chuyển hướng tập lệnh đầu ra thành một tập tin khi bạn lên lịch công việc và tail -ftập tin đó?
muru

@muru, Hãy giả vờ rằng tôi đã chạy tập lệnh mà không sử dụng tailvà không muốn dừng tập lệnh đó.
vẽ Chapin

Tôi cần kiểm tra nhưng sẽ sửa đổi tập lệnh để sử dụng tee và lưu kết quả đầu ra vào một tệp, sau đó điều chỉnh nó có hoạt động không?
Journeyman Geek

Câu trả lời:


9

Nếu công việc đã bắt đầu và bạn có một số cách để có được PID của công việc đó, bạn có thể thấy nơi atđang lưu đầu ra:

$ 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

Như bạn có thể thấy, đầu ra được lưu vào một tệp tạm thời, bây giờ bạn có thể kiểm tra:

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

Bạn cần sudovì thư mục chứa không thể truy cập được trên thế giới (ít nhất là trên 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
Ngài là người hùng của tôi! Điều đó đã làm việc hoàn hảo!
vẽ Chapin

4
Tôi muốn nói thêm rằng, nếu bạn biết bạn chỉ đang chạy một atcông việc. Bạn thậm chí không cần PID. Bạn chỉ có thể chạy sudo ls /var/spool/cron/atspoolvà theo lý thuyết là tập tin duy nhất ở đó.
vẽ Chapin

0

Một cách khác để xác định tập tin spool nào thuộc về công việc của bạn là lấy số công việc từ đó atq.

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

Chuyển đổi số công việc thành hex. ví dụ 38 (dec) = 26 (hex).

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

Tệp của bạn sẽ được đặt tên là Thư xếp hàng (99% thời gian a), theo sau là id công việc hex 5 chữ số (tôi đã học được điều này bằng cách xem qua mã nguồn của atlệnh).

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

Sau đó, bạn có thể xem thiết bị xuất chuẩn

drew@sokar:~$ sudo less /var/spool/cron/atspool/a0002601856a0f
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.