58 votes

Comment imprimer le contenu d'un travail à la volée ?

J'ai une boîte Debian avec quelques tâches programmées en utilisant at . Je sais que je peux dresser la liste des emplois et de leurs durées à l'aide de atq mais existe-t-il un moyen d'imprimer leur contenu, à moins de jeter un coup d'œil dans le fichier /var/spool/cron/atjobs ?

60voto

Janne Pikkarainen Points 31244

at -c jobnumber énumérera un seul travail. Si vous voulez les voir tous, vous pouvez créer un script comme

#!/bin/bash
MAXJOB=$(atq | head -n1 | awk '{ print $1; }')
for each in $(seq 1 $MAXJOB); do echo "JOB $each"; at -c $each; done 

Il y a probablement un moyen plus court de faire cela, je l'ai juste sorti de ma tête :)

14voto

Michael Snyder Points 2457

En s'appuyant sur les réponses précédentes, cette liste énumère la ligne de chaque emploi à partir de atq qui indique le numéro de la tâche et l'heure prévue, puis la commande à exécuter, classée par ordre chronologique (plutôt que par numéro de tâche) :

for j in $(atq | sort -k6,6 -k3,3M -k4,4 -k5,5 |cut -f 1); do atq |grep -P "^$j\t" ;at -c "$j" | tail -n 2; done

produisant, par exemple

48  Fri Mar 10 15:13:00 2017 a root
/usr/local/bin/a-command

47  Fri Mar 10 15:14:00 2017 a root
/usr/local/bin/another-command

5voto

pavelpanov Points 109

Une approche beaucoup plus simple :

for j in $(atq | cut -f 1); do at -c "$j"; done

Vous pouvez également examiner chacun d'entre eux dans less à son tour, ce qui pourrait être plus clair :

for j in $(atq | cut -f 1); do at -c "$j" | less; done

2voto

mb14 Points 7166

J'ai créé la commande atqc pour cela ("atq with command"). Une fonction bash. Exécutez-la sur la ligne de commande bash (commande de terminal). Ou mettez-la dans le fichier ~/.bashrc pour le rendre disponible ultérieurement :

atqc () { atq|perl -ne'($q,$j)=/((\d+).*)/;qx(at -c $j)=~/(marcinDEL\w+).\n(.*?)\n\1/s;print"$q $2"'; }

Testez-le :

atqc

Cela fonctionne pour RHEL7 avec at -V version 3.1.13.

Ubuntu 16.04 avec at -V La version 3.1.18 a un format de sortie légèrement différent en at -c N Sur mon serveur Ubuntu, cela fonctionne :

atqc(){ atq|perl -nE'($q,$j)=/((\d+).*)/;qx(at -c $j)=~/\n}\n(.*?)\s*$/s;say"$q: $1"';}

2voto

flamey Points 522

Voici une autre approche, similaire aux autres dans ce fil de discussion, mais qui utilise davantage awk :

atq | awk '{ print "at -c " $1 }' | bash

Pour faire un "essai" et voir ce qui serait exécuté, il suffit de supprimer la partie "| bash" à la fin.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X