如何检查 Linux shell 脚本是否由 cronjob 执行?

问题描述 投票:0回答:2

是否可以识别 Linux shell 脚本是由用户执行还是由 cronjob 执行?

如果是,我如何识别/检查 shell 脚本是否由 cronjob 执行?

我想在我的脚本中实现一个功能,它返回一些其他消息,就像它是由用户执行的一样。例如这样:

    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
shell cron cron-task
2个回答
8
投票

一个选项是测试脚本是否附加到 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

请注意,由

at(1)
触发的作业也可以在没有 tty 的情况下运行,尽管不是专门由 cron 运行。

另请注意,这是 POSIX,而不是 Linux(或 bash)特定的。


0
投票

假设您有一个允许您设置环境变量的

cron
版本,您可以这样做:

打开

crontab
进行编辑并添加变量,如下所示:

crontab -e

## in the crontab, add this line:

RUN_BY_CRON="TRUE"

## save & exit editor

在从

cron
运行的脚本中,添加以下行来测试
RUN_BY_CRON
变量:

#!/usr/bin/bash
set -u                              # this line is optional
...
RUN_BY_CRON=${RUN_BY_CRON-""}       # shell parameter expansion
...
if [ "$RUN_BY_CRON" = "TRUE" ]; then
    echo "script $0 is RUN_BY_CRON"
else
    echo "script $0 is NOT RUN_BY_CRON"
fi
© www.soinside.com 2019 - 2024. All rights reserved.