web-dev-qa-db-fra.com

Comment imprimer le contenu de at jobs?

J'ai une boîte Debian avec des tâches planifiées en utilisant at. Je sais que je peux lister les travaux avec leur temps en utilisant atq, mais existe-t-il un moyen d'imprimer leur contenu, à part jeter un coup d'œil dans /var/spool/cron/atjobs?

41
che

at -c jobnumber listera 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, je l'ai juste sorti de ma tête :)

41
Janne Pikkarainen

En s'appuyant sur les réponses précédentes, cela répertorie chaque ligne de travail à partir de atq indiquant le numéro de travail et l'heure planifiée, puis juste la commande à exécuter, triée chronologiquement (plutôt que le numéro de 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
8
palilicium

Une approche beaucoup plus simple:

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

Vous pouvez également les examiner tour à tour dans less, ce qui pourrait être plus clair:

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

J'ai créé la commande atqc pour cela ("atq avec commande"). Une fonction bash. Exécutez cela sur la ligne de commande bash (commande de terminal). Ou mettez-le dans le ~/.bashrc fichier 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 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 dans at -c N, donc sur mon serveur Ubuntu cela fonctionne:

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

Voici une approche alternative, similaire aux autres de ce fil mais utilisant plus awk:

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

Pour faire un "essai à sec" et voir ce qui serait exécuté, supprimez simplement la partie "| bash" de la fin.

1
presto8