2015-10-26 19 views
5

È possibile identificare, se uno script di shell Linux viene eseguito da un utente o un cronjob?Come verificare se uno script di shell Linux viene eseguito da un cronjob?

Se sì, come posso identificare/verificare, se lo script della shell viene eseguito da un cronjob?

Voglio implementare una funzione nel mio script, che restituisce alcuni altri messaggi come se fosse eseguita da un utente. Ad esempio:

if [[ "$type" == "cron" ]]; then 
     echo "This was executed by a cronjob. It's an automated task."; 
    else 
     USERNAME="$(whoami)" 
     echo "This was executed by a user. Hi ${USERNAME}, how are you?"; 
    fi 
+0

Utilizzare le variabili di ambiente? '* * * * * CRON_FIRED = true/path/to/myscript' ma nota che la sintassi è [soggetta all'implementazione di cron] (http://stackoverflow.com/a/10657111/2908724) e può anche essere ingannata banalmente . – bishop

risposta

6

Un'opzione è verificare se lo script è collegato a un tty.

#!/bin/sh 

if [ -t 0 ]; then 
    echo "I'm on a TTY, this is interactive." 
else 
    logger "My output may get emailed, or may not. Let's log things instead." 
fi 

Nota che i lavori sparati da at(1) vengono eseguiti anche senza un tty, anche se non specificamente da cron.

Nota anche che questo è POSIX, non Linux- (o bash-) specifico.

+0

Thx, sembra essere la soluzione. Dimentico sempre, dove posso trovare l'elenco dei parametri di test 'if' disponibili come -n, -x, -f e anche il tuo usato -t. Dove posso trovare questo elenco? Voglio leggere, che cosa significa esattamente "-t". POSIX significa che funziona su ogni distribuzione Linux, giusto? – user2966991

+1

@ user2966991 che sarebbe http://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html o 'man 1p test' –

+1

@ user2966991 In questo caso POSIX significa che dovrebbe funzionare con qualsiasi shell conforme a POSIX. Tali shell possono anche essere trovate su Windows e, tecnicamente, è possibile avere una distribuzione Linux senza una shell POSIX. –

Problemi correlati