Sortie des tâches Cron sur la console

J'ai écrit un script shell ( myscript.sh ):

#!/bin/sh
ls
pwd

Je veux planifier ce travail pour chaque minute et il devrait s'afficher sur la console. Pour ce faire, j'ai fait crontab -e :

*/1 * * * * /root/myscript.sh

Ici, il affiche la sortie dans le fichier /var/mail/root plutôt que d'imprimer sur la console.

Quels changements dois-je faire pour imprimer la sortie sur la console?

0

2 Réponses

Le moyen le plus simple que je puisse penser est de consigner la sortie sur le disque et d'avoir une fenêtre de console vérifiant constamment si le fichier de log a été modifié et en imprimant les changements.

crontab:

*/1 * * * * /root/myscript.sh | tee -a /path/to/logfile.log

dans la console:

tail -F /path/to/logfile.log

Le problème avec ceci est que vous obtiendrez un fichier journal toujours croissant qui devra être périodiquement supprimé.

Pour éviter cela, vous devrez faire quelque chose de plus compliqué, en identifiant le pid de la console que vous souhaitez écrire et en l'enregistrant dans un endroit prédéfini.

script de console:

#!/usr/bin/env bash

# register.sh script    
# prints parent pid to special file

echo $PPID > /path/to/predfined_location.txt

script wrapper pour crontab

#!/usr/bin/env bash

cmd=$1
remote_pid_location=$2

# Read the contents of the file into $remote_pid.
# Hopefully the contents will be the pid of the process that wants the output 
# of the command to be run.
read remote_pid < $remote_pid_location

# if the process still exists and has an open stdin file descriptor
if stat /proc/$remote_pid/fd/0 &>/dev/null
then
    # then run the command echoing it's output to stdout and to the
    # stdin of the remote process
    $cmd | tee /proc/$remote_pid/fd/0 
else
    # otherwise just run the command as normal
    $cmd
fi

utilisation de crontab:

*/1 * * * * /root/wrapper_script.sh /root/myscript.sh /path/to/predefined_location.txt

Maintenant, tout ce que vous avez à faire est d'exécuter register.sh dans la console à laquelle vous voulez que le programme imprime.

0
ajouté
Pouvons-nous imprimer la sortie périodiquement après chaque minute sur l'écran plutôt que de la rediriger dans le fichier?
ajouté l'auteur Sasikiran Vaddi, source
J'avais suivi la même procédure que vous avez mentionnée. Mais il donne le message comme/bin/sh: /root/crontest/wrapper.sh: Permission refusée dans/var/mail/root. Je ne suis pas capable de comprendre pourquoi il donne celui-ci.
ajouté l'auteur Sasikiran Vaddi, source
J'avais donné les permissions d'exécution maintenant et essayé d'exécuter register.sh Il apparaît dans/var/mail/root comme ceci, /root/crontest/wrapper.sh: ligne 6: /root/crontest/register.txt: No such fichier ou répertoire et affichant la sortie de "ls, pwd" En fait, j'avais un doute, Est-ce que je dois placer myscript.sh dans console.sh où vous avez commenté comme # register.sh
ajouté l'auteur Sasikiran Vaddi, source
Je pensais que cela va créer automatiquement, donc je n'ai pas créé le fichier register.txt Maintenant, j'ai créé le fichier register.txt. Mais maintenant, quand j'exécute register.sh, il montre "command not found", mais la sortie redirige vers le fichier/var/mail/root pour chaque minute.
ajouté l'auteur Sasikiran Vaddi, source
Donc, vous voulez essentiellement capturer l'ensemble de la sortie, puis tout d'un coup tout imprimer votre console à la fois? Avez-vous essayé la deuxième solution qui ne redirige pas vers un fichier?
ajouté l'auteur Dunes, source
la plupart du temps comme ça vous n'avez pas donné d'autorisations d'exécution à wrapper.sh
ajouté l'auteur Dunes, source
Le script wrapper se plaint que register.txt n'existe pas. Est-ce qu'il existe? Avez-vous déjà lancé register.sh?
ajouté l'auteur Dunes, source

J'ai essayé d'obtenir la sortie d'un travail cron à un terminal gnome, et géré par ce

*/1 * * * * /root/myscript.sh > /dev/pts/0

Je suppose que si vous n'avez pas une interface graphique et que vous avez seulement CLI, vous pouvez utiliser

*/1 * * * * /root/myscript.sh > /dev/tty1

pour obtenir la sortie d'un travail crontab à rediriger vers votre console.

0
ajouté