web-dev-qa-db-fra.com

Obtenir la sortie d'un travail cron sur le terminal

J'ai un programme qui imprime une sortie que j'aimerais afficher sur mon terminal une fois par heure pendant la journée de travail.

$ crontab -l
0 07-17 * * * /home/dat/scripts/cron.out

syslog rapporte ce qui suit:

(dat) CMD (/home/dat/scripts/cron.exe)
Jun 18 12:02:01 picard CRON[10848]: (CRON) info (No MTA installed, discarding output)

Qu'est-ce que je rate?

15
user168328

La mauvaise solution pourrait être de rediriger la sortie de votre programme vers le fichier pts d’un terminal déjà existant.

Pour connaître le fichier pts, tapez simplement la commande tty

~$ tty
/dev/pts/4

alors votre crontab serait:

0 07-17 * * * /home/dat/scripts/cron.out > /dev/pts/4

Une autre façon pourrait être de lancer le programme en tant qu'argument du terminal:

xfce4-terminal --command=/home/dat/scripts/cron.out --display=:0.0 -H

display est l'affichage X où vous souhaitez afficher le terminal, -H indique au terminal de rester ouvert une fois la commande terminée. Cela créera à chaque fois un nouveau terminal.

crontab:

0 07-17 * * * /usr/bin/xfce4-terminal --display=:0.0 -H --command=/home/dat/scripts/cron.out

si l'affichage n'est pas présent, une erreur sera consignée par syslog.

13
Artix

Cron vous envoie par courrier électronique la sortie de votre script. Malheureusement, buntu ne configure pas le courrier local par défaut , c'est pourquoi Cron vous indique dans les journaux "Non MTA installé, annulation de la sortie".

Configurer le courrier local pourrait être un moyen de résoudre votre problème. Au lieu d'une sortie dans un terminal, vous recevez une notification par courrier électronique.

Si vous voulez que votre tâche cron soit transmise à un terminal, vous devez rediriger sa sortie vers le terminal. La partie redirection est facile -

0 07-17 * * * /home/dat/scripts/cron.out >/dev/pts/42 2>&1

mais le problème est de savoir quel terminal rediriger. Il n’ya pas de réponse universelle à cela, cela dépend de la manière dont vous voulez sélectionner le terminal parmi ceux auxquels vous êtes connecté.

Pour les utilisations typiques, une notification via l'interface graphique serait plus appropriée. Vous pouvez utiliser notify-send . Vous aurez besoin de définissez la variable d'environnement DISPLAY .

0 07-17 * * * DISPLAY=:0 notify-send "$(/home/dat/scripts/cron.out)"
6
Gilles

Cron envoie la sortie à un mailer. Si vous voulez voir la sortie dans un terminal, vous pouvez vous connecter à un fichier et utiliser tail -f pour voir la sortie dans le terminal que vous voulez voir.


Connexion à un fichier

  • La réponse la plus simple consiste à se connecter directement à un fichier avec une entrée crontab telle que:

0 07-17 * * * /home/dat/scripts/cron.out > /path/to/log.txt 2> /path/to/error.txt

Autres façons de se connecter:

  • Si votre programme est un script sur lequel vous pouvez écrire, vous pouvez le modifier pour rediriger la sortie vers un fichier journal. echo output > log.txt, ou vous pouvez utiliser le script wrapper décrit ci-dessous.
  • Si votre programme est un fichier binaire ou non inscriptible, vous devez écrire le script wrapper pour capturer la sortie dans un fichier.

Exemple de programme et script wrapper:

$ cat program.sh wrapper.sh 
#!/bin/bash
# sample program
echo "arg 1=$1 arg2=$2 arg3=$3"
echo "sample error" >&2 

#!/bin/bash
# sample wrapper
exec ./program.sh "$@" >log.txt 2> error.txt

Exemple d'exécution 1:

$ ./wrapper.sh 1 2 3 ; cat error.txt  log.txt 
sample error
arg 1=1 arg2=2 arg3=3

Exemple d'exécution 2:

$ ./wrapper.sh "A B C" D E ; cat error.txt log.txt 
sample error
arg 1=A B C arg2=D arg3=E

Voir la sortie dans le terminal:

Maintenant que vous enregistrez les erreurs standard et standard dans un fichier, dans n’importe quel terminal, vous pouvez exécuter tail -f sur un ou les deux fichiers tels que tail -f log.txt ou tail -f log.txt error.txt, de sorte que tail surveillera ou suivra plutôt le ou les fichiers à modifier. page de garde

$ tail -f log.txt  error.txt
==> log.txt <==
arg 1=1 arg2=2 arg3=3

==> error.txt <==
sample error

Fichiers de journalisation ajoutés après:

Si log.txt ou error.txt sont ajoutés ultérieurement à votre programme ou à un autre terminal tel que $ echo "more output" >> log.txt, la sortie est visible sur le terminal exécutant $ tail -f log.txt error.txt.

==> log.txt <==
more output

De plus, $ echo code red >> error.txt résulte en:

==> error.txt <==
code red
2
Keith Reynolds