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.