Activitățile Cron de ieșire pe consola

Am scris un script shell ( myscript.sh ):

#!/bin/sh
ls
pwd

Vreau să programez această slujbă pentru fiecare minut și ar trebui să apară pe consola. Pentru a face asta, am făcut crontab -e :

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

Aici se afișează ieșirea din fișierul /var/mail/root în locul imprimării pe consola.

Ce schimbări trebuie să fac pentru a imprima ieșirea pe consola?

0

2 răspunsuri

Cea mai ușoară modalitate de a mă gândi este să înregistrez ieșirea pe disc și să aibă o fereastră a consolei care verifică în mod constant pentru a vedea dacă fișierul jurnal a fost modificat și pentru a imprima modificările.

crontab:

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

în consola:

tail -F /path/to/logfile.log

Problema cu acest lucru este că veți primi un fișier jurnal tot mai mare, care va trebui să fie șterse periodic.

Pentru a evita acest lucru ar trebui să faceți ceva mai complicat, prin care să identificați pidul de consolă pe care doriți să îl scrieți și să îl stocați într-un loc predefinit.

consola script:

#!/usr/bin/env bash

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

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

wrap script pentru 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

Utilizarea crontab:

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

Acum, tot ce trebuie să faceți este să executați register.sh în consola la care doriți să se imprime programul.

0
adăugat
Putem imprima periodic ieșirea după fiecare minut de pe ecran, mai degrabă decât redirecționarea în fișier?
adăugat autor Sasikiran Vaddi, sursa
Am urmat aceeași procedură pe care ați menționat-o. Dar da mesajul ca/​​bin/sh: /root/crontest/wrapper.sh: Permisiunea a fost refuzata in/var/mail/root. Nu pot înțelege de ce dă asta.
adăugat autor Sasikiran Vaddi, sursa
Am dat permisiunile de execuție acum și am încercat să execut registry.sh Se afișează în/var/mail/root ca acesta, /root/crontest/wrapper.sh: line 6: /root/crontest/register.txt: Nu există fișier sau director și afișarea ieșire de "ls, pwd" De fapt, am avut o îndoială, Este că am să-și pună myscript.sh în console.sh unde ați comentat ca # register.sh
adăugat autor Sasikiran Vaddi, sursa
am crezut că va crea automat, așa că nu am creat fișierul register.txt Acum, am creat fișierul register.txt. Dar acum când rulez register.sh se afișează "comanda nu a fost găsită", dar ieșirea este redirecționată către fișierul/var/mail/root pentru fiecare minut.
adăugat autor Sasikiran Vaddi, sursa
Deci, doriți să capturați în întregime întreaga producție și apoi să imprimați dintr-o dată toate consola dvs. dintr-o dată? Ați încercat a doua soluție care nu redirecționează la un fișier?
adăugat autor Dunes, sursa
mai ales că nu ați dat permisiuni de executare pentru a wrapper.sh
adăugat autor Dunes, sursa
Scenariul de înfășurare se plânge că nu există registrul.txt. Exista? Ați executat register.sh încă?
adăugat autor Dunes, sursa

Am incercat sa obtin productia unui job cron la un terminal gnome si am reusit sa fac asta

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

Presupun că dacă nu ai o interfață grafică și ai doar CLI pe care l-ai putea folosi

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

pentru a obține ieșirea unei sarcini crontab pentru a fi redirecționată în consola dumneavoastră.

0
adăugat