2015-10-26 12 views
5

Kann man erkennen, ob ein Linux-Shell-Skript von einem Benutzer oder einem Cronjob ausgeführt wird?Wie überprüft man, ob Linux-Shell-Skript von einem Cronjob ausgeführt wird?

Wenn ja, wie kann ich feststellen/prüfen, ob das Shell-Skript von einem Cronjob ausgeführt wird?

Ich möchte ein Feature in meinem Skript implementieren, das einige andere Nachrichten zurückgibt, als ob es von einem Benutzer ausgeführt wird. So zum Beispiel:

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

Verwenden Sie Umgebungsvariablen? '* * * * * CRON_FIRED = true/Pfad/zu/Mein Skript' aber beachten Sie, dass die Syntax [abhängig von der Cron-Implementierung] (http://stackoverflow.com/a/10657111/2908724) und auch trivial täuschen kann . – bishop

Antwort

6

Eine Möglichkeit ist zu testen, ob das Skript an ein tty angehängt ist.

#!/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 

Beachten Sie, dass durch at(1) gefeuert Arbeitsplätze auch ohne tty laufen, wenn auch nicht ausdrücklich von cron.

Beachten Sie auch, dass dies POSIX ist, nicht Linux- (oder Bash-) spezifisch.

+0

Thx, scheint die Lösung zu sein. Ich vergesse immer, wo ich die Liste der verfügbaren 'if'-Testparameter wie -n, -x, -f sowie Ihres verwendeten -t finden kann. Wo finde ich diese Liste? Ich möchte lesen, was genau das "-t" bedeutet. POSIX bedeutet, dass es bei jeder Linux-Distribution funktioniert, oder? – user2966991

+1

@ user2966991 das wäre http://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html oder 'man 1p test' –

+1

@ user2966991 In diesem Fall bedeutet POSIX, dass es mit jeder POSIX-konformen Shell funktionieren sollte. Solche Shells können auch unter Windows gefunden werden, und technisch gesehen können Sie eine Linux-Distribution ohne POSIX-Shell verwenden. –