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.