使用 shell 脚本,可以判断它何时使用 cron 运行还是手动运行?

Roy*_*ico 5 cron shell-script

使用 shell 脚本,可以判断它何时使用 cron 运行还是手动运行?

更新:

有人问我为什么想知道。我的 cron 作业将被记录,如果有人手动执行它,我希望能够记录它。

Ric*_*lka 8

在我需要这样做的时候,我知道这是一个我永远不会重定向到文件或管道的脚本。所以一个简单的测试是检查 stdout(又名文件描述符 1)是否是一个 tty(它不会来自 cron)。在 bash 中:

if [ -t 1 ]
then
    : # running from terminal
else
    : # not running from terminal, cron maybe
fi
Run Code Online (Sandbox Code Playgroud)

再次警告,如果您的标准输出是 tty,这只是一个测试。但适用于我的简单目的。

您还可以检查您的父进程是什么。在 Linux 中,它可以很简单:

if grep -q cron /proc/$PPID/cmdline &> /dev/null
then
    : # running from cron
fi
Run Code Online (Sandbox Code Playgroud)


Dou*_*ris 5

您可以在 crontab 中定义一个唯一的环境变量:

RUNNINGFROMCRON=1

16 18 * * *     /usr/local/bin/crontest
Run Code Online (Sandbox Code Playgroud)

我用这个脚本测试过:

#! /bin/bash

echo " running script "

echo -n "testing for var: "
echo $RUNNINGFROMCRON
Run Code Online (Sandbox Code Playgroud)

当我从cron输出运行时:

running script 
testing for var: 1
Run Code Online (Sandbox Code Playgroud)

当我从命令行手动运行时,输出是:

running script 
testing for var:
Run Code Online (Sandbox Code Playgroud)