Comment imprimer le contenu des travaux?


34

J'ai une boîte Debian avec certaines tâches planifiées avec at. Je sais que je peux répertorier les tâches avec leur temps d'utilisation atq, mais y a-t-il un moyen d'imprimer leur contenu, mis à part le fait de jeter un coup d'œil /var/spool/cron/atjobs?

Réponses:


39

at -c jobnumberlistera un seul travail. Si vous voulez tous les voir, 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 le faire, j'ai juste sorti ça de ma tête :)


7
at -c $(atq | cut -f 1)ou for each in $(atq | cut -f 1)évitera les erreurs "Impossible de trouver jobid". (En outre, Bash n’a for ((each=1; each<=MAXJOB; each++))pas besoin de rien seq. Si vous êtes préoccupé par la portabilité, alors #!/bin/sh.)
pause jusqu'à nouvel ordre.

n'oubliez pas bon vieux awk,atq | awk '{ system("at -c " $1) }'
norcalli

7

En s'appuyant sur les réponses précédentes, cette option répertorie la ligne de chaque travail en atqindiquant le numéro du travail et l'heure planifiée, puis uniquement la commande à exécuter, triée par ordre chronologique (plutôt que le numéro du travail):

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

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

4

Une approche beaucoup plus simple:

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

Vous pouvez aussi regarder chacun lessà son tour, ce qui pourrait être plus clair:

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

2

J'ai créé une commande atqcpour cela ("atq with command"). Une fonction bash. Exécutez ceci sur la ligne de commande bash (commande terminal). Ou mettez-le dans le ~/.bashrcfichier pour le rendre disponible pour plus tard:

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

Essaye-le:

atqc

Cela fonctionne pour RHEL7 avec la at -Vversion 3.1.13.

Ubuntu 16.04 avec la at -Vversion 3.1.18 a un format de sortie légèrement différent at -c N, ainsi cela fonctionne sur mon serveur Ubuntu:

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