使用 shell 脚本,可以判断它何时使用 cron 运行还是手动运行?
更新:
有人问我为什么想知道。我的 cron 作业将被记录,如果有人手动执行它,我希望能够记录它。
在我需要这样做的时候,我知道这是一个我永远不会重定向到文件或管道的脚本。所以一个简单的测试是检查 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)
您可以在 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)
| 归档时间: |
|
| 查看次数: |
3571 次 |
| 最近记录: |