Tamamlanmadan önce `at` çıkışına göz atın


8

Diyelim ki atLinux'ta bir komut dosyası çalıştırıyorum (aşağıdaki örnek) birkaç saat, hatta birkaç gün süreceğini biliyorum. atTamamlandığında komutun çıktısını içeren bir e-posta göndermeye alışkınım , ancak tamamlanmadan önce geçerli çıktıya bakmak istersem ne olur ? En de zaten komut dosyasını çalıştırın ve kullanarak çıktıyı yönlendirmek unuttum varsayalım tail, teeya da diğer benzer yöntemler ve komut dosyasını durdurmak istemiyoruz. Bunu yapmak için yine de var mı?

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

tepe veya gözetleme? Yaparken ne yaptığını görmek ister misiniz?
Journeyman Geek

@JourneymanGeek, Hata! Peek yazmak istediğim şey olurdu. Ne yaptığını görmek istiyorum.
Drew Chapin

İş yerinde ve tail -fbu dosyayı zamanladığınızda komut dosyası çıktısı bir dosyaya yönlendirilsin mi?
muru

Muru, hadi senaryoyu kullanmadan çalıştırmışım gibi davranalım tailve durdurmak istemiyorum.
Drew Chapin

Ben test etmek gerekir ama tee kullanmak için komut dosyasını değiştirmek ve çıktı bir dosyaya kaydetmek, daha sonra işe kuyruk?
Journeyman Geek

Yanıtlar:


9

İş başladıysa ve o işin PID'sini almanın bir yolunu varsa at, çıktıyı nereye kaydettiğini görebilirsiniz :

$ 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

Gördüğünüz gibi, çıktı artık kontrol edebileceğiniz bir geçici dosyaya kaydedilir:

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

İhtiyacınız sudoolan dizin, dünya genelinde erişilebilir olmadığından (en azından Ubuntu 14.04'te):

$ 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
Siz efendim, benim kahramanımsınız! Mükemmel çalıştı!
Drew Chapin

4
Yine de şunu eklemek isterim ki, eğer sadece bir atiş yürüttüğünü biliyorsanız . PID'ye bile ihtiyacınız yok. Sadece koşabilirsiniz sudo ls /var/spool/cron/atspoolve teorik olarak orada tek dosya olmalıdır.
Drew Chapin

0

Hangi biriktirme dosyasının işinize ait olduğunu belirlemenin başka bir yolu, iş numarasını almaktır atq.

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

İş numarasını onaltılık biçime dönüştürün. örneğin 38 (dec) = 26 (hex).

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

Dosyanıza Kuyruk harfi (zamanın% 99'u a), ardından 5 basamaklı onaltılık iş kimliği (bunu atkomutun kaynak koduna bakarak öğrendim ) olarak adlandırılacaktır.

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

Sonra stdout'u görebilirsiniz.

drew@sokar:~$ sudo less /var/spool/cron/atspool/a0002601856a0f
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.