Jetez un œil à la sortie `at` avant qu'elle ne se termine


8

Supposons que j'exécute un script avec atLinux (exemple ci-dessous) dont je sais que cela va prendre plusieurs heures, voire plusieurs jours. Je suis habitué à atenvoyer un e-mail avec la sortie de la commande une fois qu'elle est terminée, mais que faire si je voulais jeter un œil à la sortie actuelle avant qu'elle ne se termine? Supposons également que j'ai déjà exécuté le script et oublié de rediriger la sortie à l'aide de tail, teeou d'autres méthodes similaires, et que je ne souhaite pas arrêter le script. Y a-t-il un moyen de le faire?

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

pic ou coup d'oeil? Vous voulez voir ce que ça fait en le faisant?
— Journeyman Geek

@JourneymanGeek, Oups. Peek serait ce que je voulais taper. Je veux voir ce que ça fait.
— Drew Chapin

Rediriger la sortie du script vers un fichier lorsque vous planifiez le travail et tail -fce fichier?
— muru

@muru, Imaginons que j'ai déjà exécuté le script sans l'utiliser tailet que je ne veux pas l'arrêter.
— Drew Chapin

J'aurais besoin de tester mais modifier le script pour utiliser tee et enregistrer la sortie dans un fichier, puis le travailler?
— Journeyman Geek

Réponses:


9

Si le travail a commencé et que vous avez un moyen d'obtenir le PID de ce travail, vous pouvez voir où atenregistre la sortie:

$ 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

Comme vous pouvez le voir, la sortie est enregistrée dans un fichier temporaire, que vous pouvez maintenant vérifier:

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

Vous avez besoin sudoparce que le répertoire contenant n'est pas accessible au monde (au moins sur 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
Vous monsieur, êtes mon héros! Cela a parfaitement fonctionné!
— Drew Chapin

4
Je voudrais cependant ajouter que si vous savez que vous n'exécutez qu'un seul attravail. Vous n'avez même pas besoin du PID. Vous pouvez simplement exécuter sudo ls /var/spool/cron/atspoolet il devrait, en théorie, être le seul fichier là-bas.
— Drew Chapin

0

Une autre façon de déterminer à partir de quel fichier spoule appartient votre travail consiste à obtenir le numéro de travail atq.

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

Convertissez le numéro de tâche en hexadécimal. par exemple 38 (déc) = 26 (hex).

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

Votre fichier sera nommé lettre de file d'attente (99% du temps, c'est a) suivi d'un identifiant de travail hexadécimal à 5 ​​chiffres (j'ai appris cela en parcourant le code source de la atcommande).

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

Ensuite, vous pouvez voir la sortie standard

drew@sokar:~$ sudo less /var/spool/cron/atspool/a0002601856a0f
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.