我希望 bash 脚本仅在我执行时回显,而由 cron 作业执行时不回显

我希望 bash 脚本仅在我执行时回显,而由 cron 作业执行时不回显

如果脚本由我亲自执行,我想将其回显到终端;或者,如果脚本是通过 cron 作业执行的,我想将其回显到日志文件。

Ubuntu 16.04

例子:

#!/bin/bash

if [ ***** ]; then
   echo "You executed this script just now !";
else
   echo "You were executed by the server cron at ${date}" >> example.log
fi

我重写了上面的内容,因为我认为这会是一种更简单的解释方式。这是一个更直接、更清晰的例子。

答案1

尝试这个 :

if [[ -t 0 ]]; then
    echo "executed from terminal"
elif [[ $(< /proc/$PPID/comm) == cron* ]]; then
    echo "executed by cron"
else
    echo "executed outside of a terminal"
fi

答案2

您可以选择在 crontab 文件中设置环境变量,然后让脚本检查该变量。例如,在 crontab 中添加 CRON=yes

在你的脚本中

如果 [[ "$CRON" = "yes" ]]; 那么

或者简单地检查 $CRON 是否定义 [[ -z "$CRON" ]]

答案3

超级简单的方法:只需先创建一个文件。

# m h  dom mon dow   command
* * * * * /usr/bin/touch /tmp/FOO && /your_script/

[ -f /tmp/FOO ] && echo "Executed by crontab"; rm /tmp/FOO || echo "I'm physically executing"

相关内容