是否可以识别 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
一个选项是测试脚本是否附加到 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)特定的。
假设您有一个允许您设置环境变量的
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