Obtenir la sortie d'une tâche cron sur le terminal

15

J'ai un programme qui imprime une sortie que j'aimerais faire apparaître sur mon terminal une fois toutes les heures pendant la journée de travail.

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

syslog signale 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?

user168328
la source
Les tâches cron ne sont pas censées écrire sur un terminal - il pourrait ne pas y en avoir.
guntbert

Réponses:

14

La mauvaise façon 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, il suffit de taper la ttycommande

~$ 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 comme argument du terminal:

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

displayest l'affichage X où vous souhaitez afficher le terminal, -Hest de dire 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, vous aurez une erreur enregistrée par syslog.

Artix
la source
6

Cron vous envoie par e-mail la sortie de votre script. Malheureusement, Ubuntu ne configure pas le courrier local par défaut , c'est pourquoi Cron vous dit dans les journaux «Aucun MTA installé, suppression de la sortie».

La configuration du courrier local peut être un moyen de résoudre votre problème. Au lieu d'une sortie dans un terminal, vous obtiendrez une notification par e-mail.

Si vous voulez que votre tâche cron soit sortie vers un terminal, vous devrez 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 vers quel terminal rediriger. Il n'y a pas de réponse universelle à cela, cela dépend de la façon dont vous souhaitez sélectionner le terminal parmi ceux auxquels vous êtes connecté.

Pour des utilisations typiques, une notification GUI serait plus appropriée. Vous pouvez utiliser notify-send. Vous devrez définir la DISPLAYvariable d'environnement .

0 07-17 * * * DISPLAY=:0 notify-send "$(/home/dat/scripts/cron.out)"
Gilles 'SO- arrête d'être méchant'
la source
2

Cron envoie la sortie à un expéditeur. 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 la sortie


Connectez-vous à un fichier

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

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 avec. echo output > log.txtou vous pouvez utiliser un script wrapper décrit ci-dessous.
  • Si votre programme est un fichier binaire ou non inscriptible, vous devez écrire un script wrapper pour capturer la sortie dans un fichier.

Exemple de programme et de 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

Afficher la sortie dans le terminal:

Maintenant que vous vous déconnectez à la fois de la sortie standard et de l'erreur standard dans un fichier, dans n'importe quel terminal, vous pouvez exécuter tail -fun ou les deux fichiers comme tail -f log.txtou tail -f log.txt error.txtpour que queue surveille ou plutôt suive le ou les fichiers pour les modifications. page de manuel de queue

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

==> error.txt <==
sample error

Fichiers journaux ajoutés ensuite:

Si log.txt ou error.txt sont ajoutés ultérieurement à partir de votre programme ou d'un autre terminal comme $ echo "more output" >> log.txt, la sortie est visible sur le terminal en cours d'exécution$ tail -f log.txt error.txt

==> log.txt <==
more output

De plus, cela se $ echo code red >> error.txttraduit par:

==> error.txt <==
code red
Keith Reynolds
la source